Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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:在列表中获取dict中的所有值_Python_List_Dictionary_For Loop - Fatal编程技术网

PYTHON:在列表中获取dict中的所有值

PYTHON:在列表中获取dict中的所有值,python,list,dictionary,for-loop,Python,List,Dictionary,For Loop,我有一个字典列表,我想通过使用键来获取值 我将此列表作为标题: headers = ['color','age','name'] 以下是字典目录: contents =[{'name':'bryan','age':'4','color':'white'},{'age':'3','name':'gordon'},{'name':'jordan','color':'black','age':'2'}] 我有这段代码,可以使用标题获取其中的所有值 res = [list(itemgetter(*h

我有一个字典列表,我想通过使用键来获取值

我将此列表作为标题:

headers = ['color','age','name']
以下是字典目录:

contents =[{'name':'bryan','age':'4','color':'white'},{'age':'3','name':'gordon'},{'name':'jordan','color':'black','age':'2'}]
我有这段代码,可以使用标题获取其中的所有值

res = [list(itemgetter(*headers)(i)) for i in contents]
但是我得到了一份工作

ErrorKey:'颜色'

因为字典中没有基于关键字颜色的标题

现在我很困惑,有人能帮我弄清楚如何在运行代码时避免出错。

试试:

[dic.get(key) for key in headers for dic in contents]
结果:

['white', None, 'black', '4', '3', '2', 'bryan', 'gordon', 'jordan']
 [['white', 'bryan', '4'], ['gordon', '3'], ['2', 'jordan', 'black']]
如果您不想使用Nones,请使用set intersection对您的版本稍作修改:

[list(itemgetter(*set(headers) & dic.keys())(dic)) for dic in contents]
结果:

['white', None, 'black', '4', '3', '2', 'bryan', 'gordon', 'jordan']
 [['white', 'bryan', '4'], ['gordon', '3'], ['2', 'jordan', 'black']]
如果使用第二种变体,您可能希望提前设置标题,以避免重新应用:

headers = set(headers)
尝试:

结果:

['white', None, 'black', '4', '3', '2', 'bryan', 'gordon', 'jordan']
 [['white', 'bryan', '4'], ['gordon', '3'], ['2', 'jordan', 'black']]
如果您不想使用Nones,请使用set intersection对您的版本稍作修改:

[list(itemgetter(*set(headers) & dic.keys())(dic)) for dic in contents]
结果:

['white', None, 'black', '4', '3', '2', 'bryan', 'gordon', 'jordan']
 [['white', 'bryan', '4'], ['gordon', '3'], ['2', 'jordan', 'black']]
如果使用第二种变体,您可能希望提前设置标题,以避免重新应用:

headers = set(headers)
下面是如何使用嵌套列表实现这一点:

res = [[d[h] for h in headers if h in d] for d in contents]
# [['bryan', '4', 'white'], ['gordon', '3'], ['jordan', '2', 'black']]
输出:

[['white', '4', 'bryan'], [None, '3', 'gordon'], ['black', '2', 'jordan']]
[['white', '4', 'bryan'], ['3', 'gordon'], ['black', '2', 'jordan']]
如果要省略非,请执行以下操作:

输出:

[['white', '4', 'bryan'], [None, '3', 'gordon'], ['black', '2', 'jordan']]
[['white', '4', 'bryan'], ['3', 'gordon'], ['black', '2', 'jordan']]
下面是如何使用嵌套列表实现这一点:

res = [[d[h] for h in headers if h in d] for d in contents]
# [['bryan', '4', 'white'], ['gordon', '3'], ['jordan', '2', 'black']]
输出:

[['white', '4', 'bryan'], [None, '3', 'gordon'], ['black', '2', 'jordan']]
[['white', '4', 'bryan'], ['3', 'gordon'], ['black', '2', 'jordan']]
如果要省略非,请执行以下操作:

输出:

[['white', '4', 'bryan'], [None, '3', 'gordon'], ['black', '2', 'jordan']]
[['white', '4', 'bryan'], ['3', 'gordon'], ['black', '2', 'jordan']]

您可以将标题作为一个集合使用,然后为itemgetter参数解包Heder和实际字典中的键之间的交集:

headers = {'color','age','name'}
contents =[{'name':'bryan','age':'4','color':'white'},{'age':'3','name':'gordon'},{'name':'jordan','color':'black','age':'2'}]

res = [list(itemgetter(*headers.intersection(i))(i)) for i in contents]
# [['bryan', '4', 'white'], ['gordon', '3'], ['jordan', '2', 'black']]
或者您可以使用列表:

res = [[d[h] for h in headers if h in d] for d in contents]
# [['bryan', '4', 'white'], ['gordon', '3'], ['jordan', '2', 'black']]

您可以将标题作为一个集合使用,然后为itemgetter参数解包Heder和实际字典中的键之间的交集:

headers = {'color','age','name'}
contents =[{'name':'bryan','age':'4','color':'white'},{'age':'3','name':'gordon'},{'name':'jordan','color':'black','age':'2'}]

res = [list(itemgetter(*headers.intersection(i))(i)) for i in contents]
# [['bryan', '4', 'white'], ['gordon', '3'], ['jordan', '2', 'black']]
或者您可以使用列表:

res = [[d[h] for h in headers if h in d] for d in contents]
# [['bryan', '4', 'white'], ['gordon', '3'], ['jordan', '2', 'black']]

列表中的第二个条目没有颜色,如果名称在mydict中,您可以在获取密钥之前检查密钥是否存在,或者您可以设置默认值mydict.getname、None或其他选项!不幸的是,itemgetter没有在缺少键时指定默认值的选项。您必须对内容中的dct执行类似[[dct.getkey,key-in-headers为None]的操作-对于缺少的键,将None更改为您想要的任何值,空字符串可能更适合您。谢谢@jasonharper,这非常有效。谢谢你的主意!!如果您不想要Nones,但仍然想要一行,您可以坚持使用itemgetter,请参阅我的编辑列表中的第二个条目没有颜色,您可以在mydict中的name获得它之前检查是否存在键,或者您可以设置默认值mydict.getname、None或其他选项!不幸的是,itemgetter没有在缺少键时指定默认值的选项。您必须对内容中的dct执行类似[[dct.getkey,key-in-headers为None]的操作-对于缺少的键,将None更改为您想要的任何值,空字符串可能更适合您。谢谢@jasonharper,这非常有效。谢谢你的主意!!如果你不想要无,但仍然想要一行,你可以坚持使用itemgetter,请参阅我的编辑