【问题标题】:How can I update a dictionary so that if key 'a' has a value of 'c' than the key of 'c' appends the value 'a'?如何更新字典,以便如果键“a”的值为“c”而不是“c”的键附加值“a”?
【发布时间】:2019-08-15 14:11:03
【问题描述】:

如果键'a' 的值为'c',则'c' 的键应附加'a'。请注意,与键 'a' 关联的值不包含在附加中。

我似乎无法弄清楚如何自动执行此过程以在大型字典上执行。

mydict = {
'a': ['z', 'c'],
'b': ['y', 'c'],
'c': ['q', 'r']
}

这是我想要的结果:

mydict = {
'a': ['z', 'c'],
'b': ['y', 'c'],
'c': ['q', 'r', 'a', 'b']
}

【问题讨论】:

  • 不是值,而是附加键?

标签: python loops dictionary key-value


【解决方案1】:

这是执行此操作的另一种方法,使用集合交集,以及保持父/子关系的中间映射。

from collections import defaultdict

d = defaultdict(list)

keys = set([*mydict])

for k, v in mydict.items():
    intersected = keys & set(v)
    for i in intersected:
        d[i].append(k)

print(d)
# defaultdict(list, {'c': ['b', 'a']})

for found, value in d.items():
    mydict[found].extend(value)

print(mydict)
# {'a': ['z', 'c'], 'b': ['y', 'c'], 'c': ['q', 'r', 'b', 'a']}

【讨论】:

  • 为什么是set([*mydict]) 而不是set(mydict)
  • 没想到也能提供钥匙
【解决方案2】:
for k in mydict:
    for val in mydict[k]:
        if val in mydict:
            mydict[val] += [k]

【讨论】:

  • 请在您的代码中添加一些解释,以便其他人可以从中学习
猜你喜欢
  • 1970-01-01
  • 2020-05-06
  • 2016-01-27
  • 2023-03-16
  • 2012-04-24
  • 2016-03-17
  • 2021-12-24
  • 2021-01-19
  • 2020-08-07
相关资源
最近更新 更多