函数生成字典列表

时间:2013-12-07 21:32:33

标签: python

我有一个元组列表

[('color','blue'),('number',3),('place','usa'),('color','yellow'),('place','canada')...]

我想构建一个函数,它会返回一个dictionaires列表

[{'color':blue, 'number':3, 'place':'usa'}, {'color':yellow, 'number':'', 'place':'camada'},...]

每次找到一个已经有一个赋值的键时,该函数就必须创建一个新的词典

在上面的例子中,当它按元组列表进行迭代时,在第一个元组中,它会创建一个空的dictionaire,其中包含键和空值('') - 键始终相同 - 并更新值基于元组键。然后,当它到达一个已经具有指定值('color','yellow')的tupple时,它将不得不创建另一个dictionaire并将颜色值更新为黄色等等......

然后该函数将返回一个词典列表...

我可以为一个词典做到这一点,但不知道如何让它创建一个新的词汇以及如何存储它们......

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:4)

我不完全确定我明白你的输出是什么,但也许类似

def tups_to_dicts(kv_pairs):
    # split into dictionaries
    ds = []
    for key, val in kv_pairs:
        if not ds or key in ds[-1]:
            ds.append({})
        ds[-1][key] = val
    # pad the empty values
    all_seen_keys = set().union(*ds)
    ds = [{key: d.get(key, '') for key in all_seen_keys} for d in ds]
    return ds

会让你亲近吗?它产生

>>> data = [('color','blue'),('number',3),('place','usa'),('color','yellow'),('place','canada'), ('color', 'orange'), ('sport', 'hockey')]
>>> dd = tups_to_dicts(data)
>>> for d in dd:
...     print d
...     
{'color': 'blue', 'sport': '', 'place': 'usa', 'number': 3}
{'color': 'yellow', 'sport': '', 'place': 'canada', 'number': ''}
{'color': 'orange', 'sport': 'hockey', 'place': '', 'number': ''}

答案 1 :(得分:0)

尝试list comprehensions

given = [('color', 'blue'), ('number', 3), ('place', 'usa'),
         ('color', 'yellow'), ('number', 3), ('place', 'canada')]

print [dict(given[i:i+3]) for i in range(0, len(given) - 2, 3)]

输出

[{'color': 'blue', 'place': 'usa', 'number': 3},
 {'color': 'yellow', 'place': 'canada', 'number': 3}]

注意 - 您必须拥有所有值元组才能使其正常工作,即您不能只有color& number&在某些序列中跳过place。订单&分组很重要。