1

と呼ばれる名前のリストがありますnamesnamesまた、名前に関連付けられたキーとその他のデータの両方を持つネストされた辞書のリストを含む2つの辞書があります。私がやりたいのは、リストの名前が2つの辞書のいずれかに含まれていることを確認することです。含まれている場合は、その名前にのみ関連付けられているデータを出力します。私はPythonのドキュメントでこのようなものを見つけることができません

names = ['barry','john','george','sarah','lisa','james']

dict1 = {'results':[{'name':'barry','gpa':'2.9','major':'biology'},
                  {'name':'sarah','gpa':'3.2','major':'economics'},
                  {'name':'george','gpa':'2.5','major':'english'}]}

dict2 = {'staff':[{'name':'john','position':'Lecturer','department':'economics'},
                {'name':'lisa','position':'researcher','department':'physics'},
                {'name':'james','position':'tutor','department':'english'}]}

for x in names:
    if x in dict1:
        print gpa associated with the name
    elif x in dict2:
        print position associated with the name
4

4 に答える 4

1

2 つの s に使用している構造dictはあまり最適ではありません。各 s には、各人物に関連するデータのリストである 1 つの要素しか含まれていません。名前をキーにして、1人ごとに要素を分けて再構築できれば、これは些細な問題になります。

dict1 = {'barry': {'gpa':'2.9','major':'biology'},
         'sarah': {'gpa':'3.2','major':'economics'},
         'george': {'gpa':'2.5','major':'english'}}

dict2 = {'john': {'position':'Lecturer','department':'economics'},
         'lisa': {'position':'researcher','department':'physics'},
         'james': {'position':'tutor','department':'english'}}

この形式ではデータを取得できないように見えるため、変換する必要があります。

dict_results = dict((d['name'], d) for d in dict1[results])
if name in dict_results:
    print dict_results[name]['gpa']
于 2012-07-16T22:14:50.430 に答える
1
for _name in names:
    if _name in [person['name'] for person in dict1['results']]: pass
    elif _name in [person['name'] for person in dict2['staff']]:pass

少なくともそのようなもの

于 2012-07-16T22:04:41.043 に答える
1

これはあなたのアイデアを得るはずです:

for name in names:
  print name, ":"
  print "\t", [x for x in dict2["staff"] if x["name"] == name]
  print "\t", [x for x in dict1["results"] if x["name"] == name]

版画

barry :
  []
  [{'major': 'biology', 'name': 'barry', 'gpa': '2.9'}]
john :
  [{'department': 'economics', 'position': 'Lecturer', 'name': 'john'}]
  []
george :
  []
  [{'major': 'english', 'name': 'george', 'gpa': '2.5'}]
sarah :
  []
  [{'major': 'economics', 'name': 'sarah', 'gpa': '3.2'}]
lisa :
  [{'department': 'physics', 'position': 'researcher', 'name': 'lisa'}]
  []
james :
  [{'department': 'english', 'position': 'tutor', 'name': 'james'}]
  []

このデータをデータベースから取得する場合は、問題の SQL フロンティアに取り組む必要があります。そのような運用のためにデータベースが作られています。

于 2012-07-16T22:18:25.680 に答える
0
names = ['barry','john','george','sarah','lisa','james']

dict1 = {'results':[{'name':'barry','gpa':'2.9','major':'biology'},
                  {'name':'sarah','gpa':'3.2','major':'economics'},
                  {'name':'george','gpa':'2.5','major':'english'}]}

dict2 = {'staff':[{'name':'john','position':'Lecturer','department':'economics'},
                {'name':'lisa','position':'researcher','department':'physics'},
                {'name':'james','position':'tutor','department':'english'}]}


import itertools

for x in itertools.chain(dict1['results'], dict2['staff']):
    for n in names:
        if n in x.values():
            print x

または2番目の部分は次のようになります。

ns = set(names)
for x in itertools.chain(dict1['results'], dict2['staff']):
    if x['name'] in ns:
        print x
于 2012-07-17T07:47:16.710 に答える