使用字典条目列表理解

时间:2015-11-18 22:20:11

标签: python list dictionary

试图弄清楚我如何能够将列表理解用于以下内容:

我有一本字典:

dict = {}
dict ['one'] = {"tag":"A"}
dict ['two'] = {"tag":"B"}
dict ['three'] = {"tag":"C"}

我希望创建一个列表(让我们称之为"列表"),这些列表由每个"标记"填充。每个键的值,即

['A', 'B', 'C']

使用列表理解是否有一种有效的方法?我在想像:

list = [x for x in dict[x]["tag"]]

但显然这并不是很有效。任何帮助表示赞赏!

4 个答案:

答案 0 :(得分:2)

试试这个:

d = {'one': {'tag': 'A'},
     'two': {'tag': 'B'},
     'three': {'tag': 'C'}}

tag_values = [d[i][j] for i in d for j in d[i]]

>>> print tag_values
['C', 'B', 'A']

如果重要,您可以在事后对列表进行排序。

如果内部dicts中有其他键/值对,除了'tag'之外,您可能需要指定'tag'键,如下所示:

tag_value = [d[i]['tag'] for i in d if 'tag' in d[i]]

得到相同的结果。如果'tag'肯定在那里,请删除if 'tag' in d[i]部分。

作为旁注,从来没有一个好主意调用list'列表',因为它是Python中的保留字。

答案 1 :(得分:2)

这是一个额外的步骤,但获得所需的输出并避免使用保留字:

d = {}
d['one'] = {"tag":"A"}
d['two'] = {"tag":"B"}
d['three'] = {"tag":"C"}
new_list = []
for k in ('one', 'two', 'three'):
    new_list += [x for x in d[k]["tag"]]

print(new_list)

答案 2 :(得分:1)

你可以试试这个:

[i['tag'] for i in dict.values()]

答案 3 :(得分:0)

我会做这样的事情:

untransformed = {
    'one': {'tag': 'A'},
    'two': {'tag': 'B'},
    'three': {'tag': 'C'},
    'four': 'bad'
}
transformed = [value.get('tag') for key,value in untransformed.items() if isinstance(value, dict) and 'tag' in value]

听起来您还试图从JSON中获取一些信息,您可能希望查看https://stedolan.github.io/jq/manual/等工具

相关问题