合并基于公共元素的python字典键

时间:2016-01-03 05:29:47

标签: python loops dictionary merge key

假设我们有一个这样的词典:

mysql_query("UPDATE tablename SET password='". $NPass ."' WHERE custID='$num'");

然后我们遇到一个键值对 2,8 。现在,因为键 0 的值已经出现 2 8 ,我需要合并前两个键并创建一个新的字典,如以下内容:

{0: [2, 8], 1: [8, 4], 3: [5]}

我知道可以进行大量的循环和删除。我真的在寻找一种更加诡异的方式。

提前致谢。

2 个答案:

答案 0 :(得分:2)

你的同事稍后会讨厌你,但这里

>>> d = {0: [2, 8], 1: [8, 4], 3: [5]}
>>> x = ((a,b) for a,b in itertools.combinations(d,2) if a in d and b in d and set(d[a]).intersection(d[b]))
>>> for a,b in x:d[min(a,b)].extend([i for i in d[max(a,b)] if i not in d[min(a,b)]]) or d.pop(max(a,b))
[8, 4]
>>> d
{0: [2, 8, 4], 3: [5]}

答案 1 :(得分:1)

d = {0: [2, 8], 
     1: [8, 4], 
     3: [5]}

revmap = {}
for k,vals in d.items():
    for v in vals:
        revmap[k] = v

k,v = 2,8
d[revmap[k]].extend([i for i in d[revmap[v]] if i not in d[revmap[k]]])
d.pop(revmap[v])