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