Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用字典条目进行列表理解_Python_List_Dictionary - Fatal编程技术网

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]
在列表的末尾。这样,您就可以清楚地看到您想要的标签键,如果它不在那里,您就不会抓取您找到的任何东西。