从字典列表中获取“密钥”[重复]

Posted

技术标签:

【中文标题】从字典列表中获取“密钥”[重复]【英文标题】:Getting "keys" from list of dicts [duplicate] 【发布时间】:2019-05-25 19:09:06 【问题描述】:

我有以下数据:

['id': ['132605', '132750', '132772', '132773', '133065', '133150', '133185', '133188', '133271', '133298'], 
 'number': ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'], 
 'id': ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1']]

获取键列表的最佳方法是什么(就好像它是一个字典而不是一个数组)?目前我正在做:

>>> [list(i.keys())[0] for i in e.original_column_data]
['id', 'number', 'id']

但这感觉有点老套

【问题讨论】:

【参考方案1】:

第一种方式

字典的迭代给你它的键,所以很简单

>>> [key for key in dict]

给你一个键列表,你可以得到你想要的

>>> [key for dict in dict_list for key in dict]

第二种方式(仅限python 2)

使用.key()(在您的代码中使用) 但没有必要使用list()(编辑:对于python 2) 这是它的样子:

>>> [dict.keys()[0] for dict in dict_list]

在您的代码中,字典只有一个键,因此这两个键的结果相同。 但是我更喜欢第一个,因为它提供了所有字典的所有键

【讨论】:

dict.keys()[0] 在 Python 3 中不起作用【参考方案2】:

这更简单,做同样的事情:

[k for d in e.original_column_data for k in d]
=> ['id', 'number', 'id']

【讨论】:

【参考方案3】:

这有什么不好的?这有点不雅。您只需要执行以下操作:

>>> keys = []
>>> data = ['id': ['132605', '132750', '132772', '132773', '133065', '133150', '133185', '133188', '133271', '133298'],
...  'number': ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10'],
...  'id': ['1', '1', '1', '1', '1', '1', '1', '1', '1', '1']]
>>> for d in data:
...     keys.extend(d)
...
>>> keys
['id', 'number', 'id']

或者,如果您更喜欢单行:

>>> [k for d in data for k in d]
['id', 'number', 'id']

【讨论】:

感谢这些答案,这些非常有帮助。出于好奇,为什么keys.extend(d) 只添加键而不是整个字典?实际上,我必须对其进行测试以确保它有效,因为它看起来非常违反直觉。 (不像append .extend 接受一个迭代,并将迭代中的所有元素添加到列表中。 dict 对象是在其键上的可迭代对象。如果你想要一个可迭代的值,使用d.values(),如果你想要一个可迭代的键值对,使用d.items()

以上是关于从字典列表中获取“密钥”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从字典中获取列表[重复]

如何从字典列表中获取值 - Python 3.7.1 [重复]

寻找一种优雅的方法来检查字典中是不是存在密钥[重复]

从Python中的字典中删除键[重复]

从 JSON 获取列表 [重复]

从python中的字典转换为列表的问题[重复]