我有一个元组列表
[('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并将颜色值更新为黄色等等......
然后该函数将返回一个词典列表...我可以为一个词典做到这一点,但不知道如何让它创建一个新的词汇以及如何存储它们......
提前感谢您的帮助!
答案 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
。订单&分组很重要。