Python 函数生成词汇表

Python 函数生成词汇表,python,Python,我有一个元组列表 [('color','blue'),('number',3),('place','usa'),('color','yellow'),('place','canada')...] 我想构建一个函数,该函数将返回一个词典列表 [{'color':blue, 'number':3, 'place':'usa'}, {'color':yellow, 'number':'', 'place':'camada'},...] 函数每次找到一个已经有asigned值的键时,都必须创建一个新

我有一个元组列表

[('color','blue'),('number',3),('place','usa'),('color','yellow'),('place','canada')...]
我想构建一个函数,该函数将返回一个词典列表

[{'color':blue, 'number':3, 'place':'usa'}, {'color':yellow, 'number':'', 'place':'camada'},...]
函数每次找到一个已经有asigned值的键时,都必须创建一个新的dictionaire

在上面的示例中,当它通过元组列表进行迭代时,在第一个元组处,它将创建一个带有键和空值(“”)的空词典,键总是相同的,并基于元组键更新值。然后,当它到达一个元组时,该键已经有了一个赋值('color','yellow'),它必须创建另一个dictionaire,并将color的值更新为yellow,依此类推

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

我可以为一个词典编写,但不知道如何创建一个新词典以及如何存储它们


提前感谢您的帮助

我不能完全确定我是否理解您所追求的输出,但可能类似于

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': ''}

我不完全确定我是否理解您所追求的输出,但可能是类似的

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': ''}

尝试
列表理解

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}]

注意-您必须拥有所有的值元组才能执行此操作,也就是说,您不能只有
颜色
编号
&跳过
在某些序列中放置
。顺序和分组在这里很重要。

尝试
列表理解

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}]
注意-您必须拥有所有的值元组才能执行此操作,也就是说,您不能只有
颜色
编号
&跳过
在某些序列中放置
。这里的顺序和分组很重要