python - 如何覆盖Python字典值?

标签 python dictionary overwrite

我的字典的简化:

my_dict = {
    'DOC': [
        [('k', 'v'), ('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4')],
        [('k5', 'v5'), ('k', 'v'), ('k1', 'v1'), ('k6', 'v6')]
    ],
    'DIC': [
        [('k7', 'v7'), ('k3', 'v3'), ('k8', 'v8')],
        [('k5', 'v5'), ('k3', 'v3'), ('k1', 'v1'), ('k2', 'v2')],
        [('k4', 'v4'), ('k9', 'v9')]
    ],
    'INFRA': [
        [('k5', 'v5'), ('k3', 'v3'), ('k1', 'v1'), ('k2', 'v2')],
        [('k', 'v'), ('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4')]
    ]
}

覆盖我的字典值:

for k, v in my_dict.items():
     my_dict[k] = map(lambda x: dict(x), my_dict[k])

正在返回...

my_dict 
{'DIC': [{'k3': 'v3', 'k7': 'v7', 'k8': 'v8'},
         {'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k5': 'v5'},
         {'k4': 'v4', 'k9': 'v9'}],
 'DOC': [{'k': 'v', 'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'},
         {'k': 'v', 'k1': 'v1', 'k5': 'v5', 'k6': 'v6'}],
 'INFRA': [{'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k5': 'v5'},
           {'k': 'v', 'k1': 'v1', 'k2': 'v2', 'k3': 'v3', 'k4': 'v4'}]}

当我按照相同的逻辑运行真实代码时,出现错误:

ValueError: dictionary update sequence element #0 has length 6; 2 is required

我尝试创建另一个字典来接收map(),但发生了同样的错误。有人可以帮助我吗?

最佳答案

真实测试用例中的输入不符合您期望的结构。特别是,不是所有元素都是元组,而是至少有一个元素是长度为 6 的序列。例如,错误的输入可能如下所示:

{'DOC': [
    [('123456')],               # A string is a sequence, too
    [('123' '456')]             # Note the lack of a comma
    [('1','2','3','4','5','6')] # A tuple, but with 6 elements
    [['1','2','3','4','5','6']] # A list
]}

要解决此问题,请检查您的输入,例如:

for k, v in my_dict.items():
    for l in v:
        for subl in v:
            for tup in subl:
                if not len(tup) == 2:
                    raise ValueError('In %r: value is not a tuple(2), but %r'
                                     % (k, tup))

哦,顺便说一下,在设计数据结构时,遵循 Zen of Python 通常是一个好主意,其中包括:

Flat is better than nested.

关于python - 如何覆盖Python字典值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11940913/

相关文章:

python - 使用 Python PIL 和 Windows API : how to deal with rounded corners? 的事件窗口屏幕截图

python - 通过比较不同数据框中的其他两列来创建新的数据框列

java - Java 中的字符串与 Map 中的键进行比较

java - 如何将 JFormattedTextField 保持在非覆盖模式?

Python 日期时间 : how to keep whole `us(microsecond)` ?

python - 迭代二维数组的 'orthogonal' 对角线的更多 numpy 方法

python - PySpark df to dict : one column as key, 另一个作为值

swift - 如何在 Swift 4 中安全地解包字典值?

java - 针对特定情况覆盖 Java 中的 hashCode

c++ - 输出文件覆盖不正确