如何反转以字典为值的列表中的键值对?
How to reverse key value pair in list with dictionary as value?
我有一个键值对如下:
((1,{'foo':1,'abc':2,'xyz':3,'def':2}),(2,{'ghu':3,'kie':2}))
我能够将键值对反转为以下形式:
((({'foo':1,'abc':2,'xyz':3,'def':2}),1),(({'ghu':3,'kie':2})),2)
但我需要在下面的 format.Tried 中添加各种选项,但没有成功
(({'foo':1}),1)
(({'abc':2}),1)
(({'xyz':3}),1)
(({'def':2}),1)
(({'ghu':3}),2)
(({'kie':2}}),2)
谁能帮我解决这个问题?
如果元组是你想要的,那么你可以像下面这样使用一个简单的generator expression
,然后将它传递给tuple()
函数来获取所需的元组。
例子-
>>> t = ((1,{'foo':1,'abc':2,'xyz':3,'def':2}),(2,{'ghu':3,'kie':2}))
>>>
>>> nt = tuple((({k:d[k]}),i) for i, d in t for k in d.keys())
>>> nt
(({'def': 2}, 1), ({'xyz': 3}, 1), ({'abc': 2}, 1), ({'foo': 1}, 1), ({'kie': 2}, 2), ({'ghu': 3}, 2))
- 迭代给定元组中的每个项目。
- 迭代项目的第二个元素,即字典部分。
- 创建新项目,即 (({key:value},), item[0])
- 将结果追加到输出变量中。
代码:
input_val = ((1,{'foo':1,'abc':2,'xyz':3,'def':2}),(2,{'ghu':3,'kie':2}))
output_val = []
for i in input_val:
for key, value in i[1].items():
output_val.append( (({key:value},), i[0]))
import pprint
pprint.pprint(output_val)
输出:
[(({'xyz': 3},), 1),
(({'foo': 1},), 1),
(({'abc': 2},), 1),
(({'def': 2},), 1),
(({'ghu': 3},), 2),
(({'kie': 2},), 2)]
此列表理解将产生您想要的格式:
l = ((1,{'foo':1,'abc':2,'xyz':3,'def':2}),(2,{'ghu':3,'kie':2}))
tuple((({k:v}),i) for i,j in l for k,v in j.items())
我有一个键值对如下:
((1,{'foo':1,'abc':2,'xyz':3,'def':2}),(2,{'ghu':3,'kie':2}))
我能够将键值对反转为以下形式:
((({'foo':1,'abc':2,'xyz':3,'def':2}),1),(({'ghu':3,'kie':2})),2)
但我需要在下面的 format.Tried 中添加各种选项,但没有成功
(({'foo':1}),1)
(({'abc':2}),1)
(({'xyz':3}),1)
(({'def':2}),1)
(({'ghu':3}),2)
(({'kie':2}}),2)
谁能帮我解决这个问题?
如果元组是你想要的,那么你可以像下面这样使用一个简单的generator expression
,然后将它传递给tuple()
函数来获取所需的元组。
例子-
>>> t = ((1,{'foo':1,'abc':2,'xyz':3,'def':2}),(2,{'ghu':3,'kie':2}))
>>>
>>> nt = tuple((({k:d[k]}),i) for i, d in t for k in d.keys())
>>> nt
(({'def': 2}, 1), ({'xyz': 3}, 1), ({'abc': 2}, 1), ({'foo': 1}, 1), ({'kie': 2}, 2), ({'ghu': 3}, 2))
- 迭代给定元组中的每个项目。
- 迭代项目的第二个元素,即字典部分。
- 创建新项目,即 (({key:value},), item[0])
- 将结果追加到输出变量中。
代码:
input_val = ((1,{'foo':1,'abc':2,'xyz':3,'def':2}),(2,{'ghu':3,'kie':2}))
output_val = []
for i in input_val:
for key, value in i[1].items():
output_val.append( (({key:value},), i[0]))
import pprint
pprint.pprint(output_val)
输出:
[(({'xyz': 3},), 1),
(({'foo': 1},), 1),
(({'abc': 2},), 1),
(({'def': 2},), 1),
(({'ghu': 3},), 2),
(({'kie': 2},), 2)]
此列表理解将产生您想要的格式:
l = ((1,{'foo':1,'abc':2,'xyz':3,'def':2}),(2,{'ghu':3,'kie':2}))
tuple((({k:v}),i) for i,j in l for k,v in j.items())