Python append返回dict而不是列表

时间:2019-04-05 00:57:02

标签: python python-3.x list dictionary

下面的附录可以正常工作,但是它返回的是列表而不是字典。因此,当我尝试使用tag.items()提取键/值时,它告诉我有一个

  

ValueError:没有足够的值要解压(期望2,得到1)

这是正确的错误消息,因为all_tags.append创建了一个列表。如何将它作为字典返回?

tags = get_all_tags(client_tags)

for tag in tags:
    tag_key, tag_value = tag.items()

...

def get_all_tags(client_tags):

    for tag_key, tag_value in client_tags.items():
        if re.match(TAG_KEY_PATTERN, tag_key):
           all_tags.append({tag_key: tag_value})

    return all_tags

3 个答案:

答案 0 :(得分:3)

不要以log开头的list开头,只需首先创建dict

dict

或者使用def get_all_tags(client_tags): all_tags = {} for tag_key, tag_value in client_tags.items(): if re.match(TAG_KEY_PATTERN, tag_key): all_tags[tag_key] = tag_value return all_tags 理解作为单线:

dict

无论哪种方式,使用它的循环都将是:

def get_all_tags(client_tags):
    return {k: v for k, v in client_tags.items() if re.match(TAG_KEY_PATTERN, k)}

答案 1 :(得分:0)

这是因为tag.items()返回一个dict_items实例(一个对象而不是一个元组)。感到困惑的原因是,当您对其进行foreach时,可以将它们提取为元组,但是原因是,dict_item是可迭代的,每次迭代都会产生元组。

您可能想要附加像all_tags.append({tag_key: tag_value})这样的元组,而不是all_tags.append((tag_key, tag_value))

答案 2 :(得分:0)

将功能更改为此:

for tag_key, tag_value in tags.items():
    ...

您甚至可以进行字典理解:

def get_all_tags(client_tags):
    all_tags = {}
    for tag_key, tag_value in client_tags.items():
       if re.match(TAG_KEY_PATTERN, tag_key):
           all_tags[tag_key] = tag_value

    return all_tags