簡體   English   中英

Python 元組到字典 - ValueError:要解壓的值太多

[英]Python tuple to dict - ValueError: too many values to unpack

這是我要轉換為字典的元組:

rule_tuple = tuple((('rule1', 'col1', 'val1'), ('rule1', 'col2', 'val2'), ('rule1', 'col3', 'val3'), ('rule2', 'col1', 'val1'), ('rule2', 'col2', 'val2')))

這是預期的 output:

{'rule1': {'col1': 'val1', 'col2': 'val2', 'col3': 'val3'},
 'rule2': {'col1': 'val1', 'col2': 'val2'}}

這是我嘗試過的:

dict((rule, (dict((c, v) for c, v in (col, val)))) for rule, col, val in rule_tuple)

您可以遍歷並將外鍵的默認值設置為空字典,然后只需分配:

rule_tuple = (('rule1', 'col1', 'val1'), ('rule1', 'col2', 'val2'), ('rule1', 'col3', 'val3'), ('rule2', 'col1', 'val1'), ('rule2', 'col2', 'val2'))

d = {}
for k1, k2, v in rule_tuple:
    d.setdefault(k1, {})[k2] = v

留給你d

{'rule1': {'col1': 'val1', 'col2': 'val2', 'col3': 'val3'},
 'rule2': {'col1': 'val1', 'col2': 'val2'}}

定義rule_tuple時,您對tuple()有多余的調用。 解決這個問題后:

from collections import defaultdict
result = defaultdict(dict)
rule_tuple = (('rule1', 'col1', 'val1'), ('rule1', 'col2', 'val2'), ('rule1', 'col3', 'val3'), ('rule2', 'col1', 'val1'), ('rule2', 'col2', 'val2'))
for rule, col, val in rule_tuple:
    result[rule].update({col:val})

print(result)

output:

defaultdict(<class 'dict'>, {'rule1': {'col1': 'val1', 'col2': 'val2', 'col3': 'val3'}, 'rule2': {'col1': 'val1', 'col2': 'val2'}})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM