[英]Join two keys and corresponding values in a list with a character
我有两个清单
x = [{'name':'sri'}], y= [{'job':'nothing'}]
我想将两个键合并为一个键,并将值合并为一个值,例如
z = [{'name/job':'sri/nothing'}]
我尝试了以下
z = x.update(y[0])
z[0:1] = ["/".join(z[0:1])]
但它显示列表没有更新属性错误。
我试图合并两个列表,如
z = x+y
# z=[{'name':'sri'},{'job':'nothing'}]
并尝试组合键,但找不到解决方案
注意:x和y始终始终分别只有一个键值对。
您需要使用zip()
将字典配对,然后将每对中的键值对配对以生成输出字典:
result = [
{'{}/{}'.format(k1, k2): '{}/{}'.format(v1, v2) for (k1, v1), (k2, v2) in zip(d1.items(), d2.items())}
for d1, d2 in zip(x, y)
]
演示:
>>> x = [{'name': 'sri'}]
>>> y = [{'job': 'nothing'}]
>>> [
... {'{}/{}'.format(k1, k2): '{}/{}'.format(v1, v2) for (k1, v1), (k2, v2) in zip(d1.items(), d2.items())}
... for d1, d2 in zip(x, y)
... ]
[{'name/job': 'sri/nothing'}]
上面的列表和dict理解组合基本上是这样做的:
result = []
for d1, d2 in zip(x, y):
# d1 and d2 are a pair of dictionaries from lists x and y, respectively.
newdict = {}
for (k1, v1), (k2, v2) in zip(d1.items(), d2.items()):
# k1 and v1 are a key-value pair from d1, and
# k2 and v2 are a key-value pair from d2. This loop runs just once
# when your input dictionaries have only one key-value each.
key = '{}/{}'.format(k1, k2) # new key with k1/k2 combined
value = '{}/{}'.format(v1, v2) # new value with v1/v2 combined
newdict[key] = value
result.append(newdict)
但没有中间变量。
该解决方案假定x
和y
由相等数量的字典组成(列表之一中的任何其他元素都将被忽略)。 假定每个字典对都具有相同数量的键值对(同样,一个字典中的额外键值对将被忽略),并且任何字典对的键值对都以当前字典顺序组合。 对于只有一个键的字典,每个顺序都没有关系。
您可以使用一个小循环,然后将格式化的字符串用作keys
和values
z = {}
for k, v in x.items():
for a, b in y.items():
z['{}/{}'.format(k, a)] = '{}/{}'.format(v, b)
{'name/job': 'sri/nothing'}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.