【问题标题】:Exchange a key and one of its values in a dictionary在字典中交换一个键和它的一个值
【发布时间】:2021-07-05 20:31:23
【问题描述】:

我有一个交换密钥及其值之一的小例子,但我没有让它工作:

dict1 = {1: ['BB', 'CC', 'DD'], 2: ['FF', 'HH', 'GG']}
print(dict1)

for key in dict1:
    for value in dict1[key]:
        if value == 'BB':
            temp = key
            key = value            
            value = temp

print(dict1)

当前输出:

{1: ['BB', 'CC', 'DD'], 2: ['FF', 'HH', 'GG']}

期望的输出:

{BB: [1, 'CC', 'DD'], 2: ['FF', 'HH', 'GG']}

我用temp交换了valuekey,但是为什么输出没有变化(和原来的dict1一样)?

【问题讨论】:

标签: python dictionary


【解决方案1】:

解决方案?

这里有某种解决方案吗? (不是我希望的那样,但它确实可以完成工作)

dict1 = {1: ['BB', 'CC', 'DD'], 2: ['FF', 'HH', 'GG']}

for key in list(dict1):
    for i, value in enumerate(dict1[key]):
        if value == 'BB':
            dict1[value] = dict1.pop(key)
            dict1[value][i] = key

print(dict1)
{2: ['FF', 'HH', 'GG'], 'BB': [1, 'CC', 'DD']}

^^^⚠️顺序变了⚠️

参考资料:

您不能使用 for-in 循环来修改列表,因为迭代变量 (您的示例中的项目) 仅保存列表中的值而不直接指向该特定值列表项...

【讨论】:

  • 感谢Xou,非常感谢您的参考!
【解决方案2】:

一个简单的自制解决方案,创建一个新的结果字典比改变旧的字典更好。

代码:

dict1 = {1: ['BB', 'CC', 'DD'], 2: ['FF', 'HH', 'GG']}
result = {}
for k,v in dict1.items():
    if "BB" in v:
        v.remove("BB")
        result["BB"] = [k] + v
    else:
        result[k] = v
print(result)

结果:

{'BB': [1, 'CC', 'DD'], 2: ['FF', 'HH', 'GG']}

【讨论】:

    猜你喜欢
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多