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