2017-02-11 4 views
0

私はcsv.DictReaderのdictsのインスタンスとdictsのリストを持っています。dictsの異なるリスト内の一致するキー

インスタンス:

{'Salary': '3000', 'Name': 'James Jones', 'GameInfo': '[email protected] 07:30PM ET', 
'AvgPointsPerGame': '4.883', 'teamAbbrev': 'Cle', 'Position': 'SG'} 
{'Salary': '3000', 'Name': 'Justin Anderson', 'GameInfo': '[email protected] 09:00PM ET', 
'AvgPointsPerGame': '13.161', 'teamAbbrev': 'Dal', 'Position': 'SF'} 

リスト:

[ 

    {'playername': 'Justin Anderson', 'points': '6.94'}, 

    {'playername': 'DeAndre Liggins', 'points': '11.4'}, 

] 

私は、辞書のこれらのリストを反復処理名とプレイヤー名のキーを一致させる方法を見つけ出すことはできません、そして、唾1つのdictから['Name']と一致するdictからの['points']。上記の例では、私はJustin Andersonを2つのディクテーションセットにマッチさせ、Justin Andersonをプリントアウトします。6.94

アプリのコアは2つのCSVを取り、それらにディクテーションのリストを作成します。

答えて

1

それはこの方法で本当に効率的ではないのですが、それは任意の前処理必要としない:あなたが辞書のリストを前処理する必要があるよりも、あなたがより速くそれをしたい場合は

Justin Anderson 
{'Salary': '3000', 'Name': 'Justin Anderson', 'GameInfo': '[email protected] 09:00PM ET', 'AvgPointsPerGame': '13.161', 'Position': 'SF', 'teamAbbrev': 'Dal'} 
matching 
{'playername': 'Justin Anderson', 'points': '6.94'} 

# Instead of your CSVReader: 
dicts = [{'Salary': '3000', 'Name': 'James Jones', 'GameInfo': '[email protected] 07:30PM ET', 'AvgPointsPerGame': '4.883', 'teamAbbrev': 'Cle', 'Position': 'SG'}, 
     {'Salary': '3000', 'Name': 'Justin Anderson', 'GameInfo': '[email protected] 09:00PM ET', 'AvgPointsPerGame': '13.161', 'teamAbbrev': 'Dal', 'Position': 'SF'}] 

list_of_dicts = [ 
    {'playername': 'Justin Anderson', 'points': '6.94'}, 
    {'playername': 'DeAndre Liggins', 'points': '11.4'}, 
] 

# For each dictionary in the CSVReader 
for dct in dicts: 
    # For each dictionary in your list of dictionaries 
    for subdict in list_of_dicts: 
     # Check if the name and playername matches 
     if dct['Name'] == subdict['playername']: 
      # I just print out the results, you need to do your logic here 
      print(dct['Name']) 
      print(dct) 
      print('matching') 
      print(subdict) 

と、このプリントをあなたは単にplayernameを検索することができます:

>>> dict_of_dicts = {dct['playername']: dct for dct in list_of_dicts} 
>>> dict_of_dicts 
{'DeAndre Liggins': {'playername': 'DeAndre Liggins', 'points': '11.4'}, 
'Justin Anderson': {'playername': 'Justin Anderson', 'points': '6.94'}} 

次に、l oopは次のように単純化します。

for dct in dicts: 
    if dct['Name'] in dict_of_dicts: 
     print(dct['Name']) 
     print(dct) 
     print('matching') 
     print(dict_of_dicts[dct['Name']]) 

同じ結果が得られます。

+0

ありがとうございました。 Name、AvgPointsPerGame、Pointsを表示するには、これをどのように変更できますか?どのように正確に "dict_of_dicts = {dct ['playername']:dct for list_of_dicts}」という言い回しを頭の中に入れているようですが、私は構文について勉強する必要があります。しかし、それはあなたが説明したように働いています。 –

+0

あなたは 'print(dct ['Name']、dct ['AvgPointsPerGame']、dict_of_dicts [dct ['Name']] ['Points'])'を実行できます。 '{x:y for ... in ....} 'は辞書の理解度です:http://stackoverflow.com/documentation/python/196/comprehensions/738/dictionary-comprehensions#t=201702121809034331221 – MSeifert

+0

このリード私は非常にうまくソリューションに私。ありがとうMSeifert。 –

関連する問題