如何在python的列表中列出字典中找到的某些值的出现?

时间:2012-10-30 12:23:46

标签: python

dave = [{'date':'12/10/12','time':'09:12','created_by':'adam','text':'this'},
        {'date':'28/09/11','time':'15:58','created_by':'admin','text':'that'},
        {'date':'03/01/10','time':'12:34','created_by':'admin','text':'this and that'}]

如何获取created_by中找到的值列表。 (例如['adam','admin']

4 个答案:

答案 0 :(得分:5)

列表理解将很好地运作:

[ x['created_by'] for x in dave if 'created_by' in x ]

如果您完全确定'created_by'dave中包含的每个字典中的关键字,那么您可以放弃if 'created_by' in x部分 - 它会引发KeyError如果在那种情况下缺少那个密钥。

当然,如果您想要唯一值,那么您需要确定订单是否重要。如果订单不重要,可以使用set

set(x['created_by'] for x in dave if 'created_by' in x)

如果订单很重要,请参阅this classic question

答案 1 :(得分:1)

您可以使用set工厂仅返回唯一值,然后您可以通过list使用list工厂取回set: -

>>> set(x['created_by'] for x in dave)
set(['admin', 'adam'])

>>> list(set(x['created_by'] for x in dave))
['admin', 'adam']

答案 2 :(得分:1)

将它放入一个集合中,然后返回列表......

list(set(d['created_by'] for d in dave))

答案 3 :(得分:0)

列表推导的进步是对可能没有'created_by'的项使用if条件。使用凌乱的数据时,通常需要这样做。

list(set(x['created_by'] for x in dave if 'created_by' in x))
>>> ['admin', 'adam']