Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何检查列表项是否在字典中。如果是,请打印与之关联的数据_Python_Dictionary - Fatal编程技术网

Python 如何检查列表项是否在字典中。如果是,请打印与之关联的数据

Python 如何检查列表项是否在字典中。如果是,请打印与之关联的数据,python,dictionary,Python,Dictionary,我有一个名为名的名单。我还有两个字典,其中包含嵌套字典的列表,它们都有键名称和与名称关联的其他数据。我要做的是检查列表中的名称是否在两个词典中的一个词典中,如果是,则只打印与该名称关联的数据。我在python文档中找不到这些东西 names = ['barry','john','george','sarah','lisa','james'] dict1 = {'results':[{'name':'barry','gpa':'2.9','major':'biology'},

我有一个名为
名的名单
。我还有两个字典,其中包含嵌套字典的列表,它们都有键
名称
和与名称关联的其他数据。我要做的是检查列表中的名称是否在两个词典中的一个词典中,如果是,则只打印与该名称关联的数据。我在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

至少像这样,您用于两个
dict
的结构不是很理想-每个都只包含一个元素,即每个人的相关数据列表。如果您可以使用名称作为键,每个人使用一个单独的元素来重新构造这些元素,那么这将成为一个小问题

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']

这会让你产生一个想法:

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前沿。数据库是为这样的操作而建立的

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
或者第二部分可以是:

ns = set(names)
for x in itertools.chain(dict1['results'], dict2['staff']):
    if x['name'] in ns:
        print x

您的数据结构比“2个字典”要深刻得多。@IgnacioVazquez Abrams改变了问题,以反映我有嵌套的dicts列表。您的dicts不是非常有用,每个dicts只有一个条目。有没有可能使用更合理的数据结构?@MarkRansom这只是我正在使用的实际代码的一个示例。这个确切结构的目录是从外部来源获得的,所以我几乎无法控制它;但是除了创建一个新的dict(这意味着我必须克服我原来的问题)之外,我不知道这是怎么回事。是的,这是一个很好的替代方案,也是我一直在寻找的。我真的在和dicts做斗争,只是我无法理解逻辑。谢谢你提供的信息,谢谢你。不,数据是从API获取的,返回转换为python dict的json数据。这是我返回数据的唯一方法
ns = set(names)
for x in itertools.chain(dict1['results'], dict2['staff']):
    if x['name'] in ns:
        print x