0
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

4 回答 4

5

列表推导会很好地工作:

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

如果您绝对确定 that'created_by'是包含在每个 dict 中的键,则可以省略dave该部分-如果在这种情况下缺少该键if 'created_by' in x,则会引发 a 。KeyError

当然,如果您想要唯一的值,那么您需要确定顺序是否重要。如果顺序不重要,aset是要走的路:

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

如果顺序很重要,请参考这个经典问题

于 2012-10-30T12:24:52.317 回答
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']
于 2012-10-30T12:28:14.060 回答
1

把它放在一个集合中,然后回到一个列表......

list(set(d['created_by'] for d in dave))
于 2012-10-30T12:29:02.607 回答
0

列表理解的一个进步是对可能没有“created_by”的项目使用 if 条件。在处理杂乱的数据时,这通常是必需的。

list(set(x['created_by'] for x in dave if 'created_by' in x))
>>> ['admin', 'adam']
于 2012-10-30T13:55:46.577 回答