2015-11-18 126 views
0

试图找出我如何能够使用列表中理解为以下几点:列表理解使用字典条目

我有一本字典:

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

,我想创建一个列表(让我们把它这是由每个每个按键的“标签”值填充“名单”),即

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

是有一个有效的方式做到这一点使用列表理解?我在想这样的事情:

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

但显然这不起作用。任何帮助感激!

回答

1

你可以试试这个:就像你正在试图获得一些信息了JSON的,你可能想看看

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] 

它还听起来:

[i['tag'] for i in dict.values()] 
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'] 

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

如果你在内部http://stardict.sourceforge.net/Dictionaries.php下载其他键/值对,除了“标签”,您可能需要指定“标签”键,就像这样:

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

了相同的结果。如果'标签'肯定总是存在,请删除if 'tag' in d[i]部件。

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

+1

如果内部的字典有另一个键,例如'{'tag':'B','foo':'bar'}'那么'bar'会在输出中显示这是不对的。所以这个解决方案是脆弱的。 – dopstar

+0

@dopstar编辑为这种可能性 – Totem

+0

我没有看到OP问题中的任何内容,保证内部字典始终有一个键(只有一个键),因为字典是可变的任何事情都可以发生。在知道发生了什么之前,我们需要阅读该列表comp,我们知道我们想要'标记'键,但是我们仍然在迭代'a'子句。 – dopstar

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)