试图弄清楚我如何能够将列表理解用于以下内容:
我有一本字典:
dict = {}
dict ['one'] = {"tag":"A"}
dict ['two'] = {"tag":"B"}
dict ['three'] = {"tag":"C"}
我希望创建一个列表(让我们称之为"列表"),这些列表由每个"标记"填充。每个键的值,即
['A', 'B', 'C']
使用列表理解是否有一种有效的方法?我在想像:
list = [x for x in dict[x]["tag"]]
但显然这并不是很有效。任何帮助表示赞赏!
答案 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/等工具