Python 使用字典条目进行列表理解
试图找出我如何能够使用列表理解进行以下操作: 我有一本字典:Python 使用字典条目进行列表理解,python,list,dictionary,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"]] 但显然,这不太管用。
dict = {}
dict ['one'] = {"tag":"A"}
dict ['two'] = {"tag":"B"}
dict ['three'] = {"tag":"C"}
我想创建一个列表(我们称之为“列表”),它由每个键的每个“标记”值填充,即
['A', 'B', 'C']
使用列表理解有没有一种有效的方法?我的想法是:
list = [x for x in dict[x]["tag"]]
但显然,这不太管用。感谢您的帮助 您可以尝试以下方法:
[i['tag'] for i in dict.values()]
您可以尝试以下方法:
[i['tag'] for i in dict.values()]
我会这样做:
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]
tag_value = [d[i]['tag'] for i in d if 'tag' in d[i]]
听起来你也在试图从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]
tag_value = [d[i]['tag'] for i in d if 'tag' in d[i]]
听起来,您正试图从JSON中获取一些信息。您可能希望查看类似于的工具,请尝试以下方法:
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']
如果重要的话,你可以在以后对列表进行排序
如果内部DICT中除了“标记”之外还有其他键/值对,则可能需要指定“标记”键,如下所示:
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]
tag_value = [d[i]['tag'] for i in d if 'tag' in d[i]]
为了同样的结果。如果“tag”肯定始终存在,请删除d[i]部分中的If“tag”
作为旁注,将列表称为“list”从来都不是一个好主意,因为它在Python中是一个保留字。尝试以下方法:
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']
如果重要的话,你可以在以后对列表进行排序
如果内部DICT中除了“标记”之外还有其他键/值对,则可能需要指定“标记”键,如下所示:
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]
tag_value = [d[i]['tag'] for i in d if 'tag' in d[i]]
为了同样的结果。如果“tag”肯定始终存在,请删除d[i]
部分中的If“tag”
作为旁注,调用列表从来都不是一个好主意,因为它在Python中是一个保留字。这是一个额外的步骤,但可以获得所需的输出并避免使用保留字:
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)
这是一个额外的步骤,但可以获得所需的输出,并避免使用保留字:
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)
'bad'.get('tag')
不会像你想的那样很好地处理错误。是的,我最初在那里有一个if语句,但删除了它'bad'.get('tag')
不会像你想的那样很好地处理错误。是的,我最初在那里有一个if语句,但是如果内部的dict有另一个键,就删除了它{'tag':'B','foo':'bar'}
然后,bar
将显示在输出中,这是不正确的。因此这个解决方案是脆弱的。我没有从OP问题中看到任何东西可以保证内部dict始终有一个键(并且只有一个键)由于dict是可变的,任何事情都可能发生。在知道发生了什么之前,我们需要阅读列表comp 3次,我们知道我们需要“tag”键,但我们仍在迭代a
子ct。编辑列表comp更简单、更好、更快。+1.哦,为了保证“tag”的存在,如果“tag”在a[i]
在列表的末尾。这样很明显,你想要标记键,如果没有,你就不会抓取你找到的任何东西。如果内部dict有另一个键,例如{'tag':'B','foo':'bar'}
然后,条
将显示在输出中,这是不正确的。因此,这个解决方案是脆弱的。我从OP问题中看不到任何东西可以保证内部dict始终有一个键(并且只有一个键)由于dict是可变的,任何事情都可能发生。在知道发生了什么之前,我们需要阅读列表comp 3次,我们知道我们需要“tag”键,但我们仍在迭代a
子ct。编辑列表comp更简单、更好、更快。+1.哦,为了保证“tag”的存在,如果“tag”在a[i]
在列表的末尾。这样,您就可以清楚地看到您想要的标签键,如果它不在那里,您就不会抓取您找到的任何东西。