通过以列表为值的python字典进行迭代

时间:2018-08-03 15:37:40

标签: python dictionary iterator

我正在尝试遍历如下字典:

    d = {
    "list_one": [
        "hello",
        "two",
        "three"
    ],
    "list_two": [
        "morning",
        "rain"
    ]
}

我正在使用该功能:

def combine_words(d):
    for k, v in d.items():
        a = {k: ("|".join(v))}
    return a

当我用print运行它时,我的输出只是一个键,一对值。我不确定这里发生了什么。我的理想输出是:

{
'list_one': 'hello|two|three',
'list_two': 'morning|rain'
}

3 个答案:

答案 0 :(得分:6)

def combine_words(d):
    for k, v in d.items():
        a = {k: ("|".join(v))}
    return a

这会不断地将字典重新分配给a,并且不会合并结果

def combine_words(d):
    a = {}
    for k, v in d.items():
        a[k] =  ("|".join(v))
    return a

将继续在字典中添加新条目

答案 1 :(得分:4)

每次循环时,

a都会被新的dict取代。您要了解字典。

def combine_words(d):
    return {k: "|".join(v) for k, v in d.items()}

答案 2 :(得分:0)

问题在于,由于重新分配了a,因此在for循环的每次迭代期间都更改了a的值。您可以修改代码来解决此问题:

for k, v in d.items():
    a[k] = "|".join(v)

或者,您可以使用字典理解:

return {k: "|".join(v) for k, v in d.items()}