Python字典 - 单键,多值对

时间:2018-02-06 16:50:28

标签: python

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。

3 个答案:

答案 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 [[]])]