05ff020: a289 9585 a2a2 1ed3 f4c2 d7f5 f8d3 f1f3 ................
05ff030: e7c4 1e95 a493 931e d985 98a4 85a2 a396 ................
05ff040: 991e 95a4 9393 1e95 a493 931e 95a4 9393 ................
05ff050: 1ef2 f0f2 f2f2 f2f4 f0f4 f3f1 1ed2 d3e8 ................
05ff060: e6f8 f7f8 c2e6 c1d2 1ee2 8599 a589 8389 ................
05ff070: 9587 1ec2 9696 9240 9686 40c2 a4a2 8995 .......@..@.....
05ff080: 85a2 a21e c689 9985 1ec2 a4a2 8995 85a2 ................
05ff090: a240 d6a6 9585 99a2 1e95 a493 931e 95a4 .@..............
05ff0a0: 9393 1e95 a493 931e f0f0 f0f5 1ec9 d31e ................
05ff0b0: f0f0 f0f0 f0f0 f0f0 f0f0 f0f0 f3f5 f825 ...............%
这是一个单键,多值对。
我想分别将Dict= [('or', []), ('and', [5, 12]), ('with', [9])]
和5
分配给12
。
期望的输出
'and'
如何进行..? 并且,我想使这个一般像长度也可以超过2。
答案 0 :(得分:2)
你可以试试这个:
d= [('or', []), ('and', [5, 12]), ('with', [9])]
new_d = [g for h in [[i] if len(i[-1]) < 2 else [(i[0], c) for c in i[-1]] for i in d] for g in h]
输出:
[('or', []), ('and', 5), ('and', 12), ('with', [9])]
答案 1 :(得分:1)
我会在这里使用 good-ol 循环。列表理解会如此复杂,最终会让人感到难以理解。
data = [('or', []), ('and', [5, 12]), ('with', [9])]
res = []
for k, v in data:
if len(v)>1:
for r in v:
res.append((k, [r]))
else:
res.append((k, v))
print(res)
产生:
[('or', []), ('and', [5]), ('and', [12]), ('with', [9])]
答案 2 :(得分:0)
添加给定答案会更有趣: 如果您不关心订单,可以像下面那样使列表理解:
transf_dict = [(x[0],y) for x in Dict for y in x[1]] + [(x[0],[]) for x in Dict if not x[1]]
您还可以将您的字典转换为实际字典
newdict = dict(Dict)
我认为这更具可读性。例如:
transf_dict = []
for key,item in newdict.items():
if not item:
transf_dict.append((key,[]))
else:
transf_dict.extend([(key,[x]) for x in item])
会提供您想要的输出,但所有这些都是以订购为代价的。如果您愿意稍微更改格式,请尝试:
transf_dict = [(x, lst) for x, y in Dict for lst in (y if y else [[]])]