字典更新序列元素#0的长度为3;使用元组更新时需要2

时间:2017-06-28 13:36:33

标签: python dictionary

我有一个字典的问题,我想分成另外两个。

dico={'GA1': {'main': 1, 'middle': 1, 'sub': 1}, 
      'GA2': {'main': 1, 'middle': 1, 'sub': 2}, 
      'GA3': {'main': 1, 'middle': 1, 'sub': 3}, 
      'GA4': {'main': 1, 'middle': 1, 'sub': 4}, 
      'GA5': {'main': 1, 'middle': 1, 'sub': 5}, 
      'GA6': {'main': 1, 'middle': 1, 'sub': 6}, 
      'GA7': {'main': 1, 'middle': 1, 'sub': 7}, 
      'GA8': {'main': 1, 'middle': 1, 'sub': 8}, 
      'GA9': {'main': 1, 'middle': 1, 'sub': 9}, 
      'GA10': {'main': 1, 'middle': 1, 'sub': 10}}

我想将GA2和GA6放在字典d1中的GA10和字典d2中的GA1和GA3到GA5。

当我将其转换为列表时,我最终会得到类似的问题,

list(dico.items())[0] 

给出了(' GA1',{'主':1,'中':1,' sub':1}) 当我想将其设置为我的新词典时,

d2 = {}
d2.update(list(dico.items())[0])

我最终得到" builtins.ValueError:字典更新序列元素#0的长度为3; 2是必需的"

字典是元组元素的无效格式吗?

感谢您的帮助

亚历山大

3 个答案:

答案 0 :(得分:1)

你的意思是?

d2.update([list(dico.items())[0]])

您可以使用元组列表初始化字典。你只提供一个元组,而不是列表中的元组。使用[]初始化单例列表并传递:

{'GA10': {'middle': 1, 'main': 1, 'sub': 10}}

此外,执行list(dico.items())然后获取第0个元素是浪费的。如果可以,请考虑改变您的问题解决方法。

答案 1 :(得分:0)

创建所需的键列表,然后使用dict理解。下面的代码创建了一个字典d2,其中包含GA1,GA8和GA9,键值对。

StackTraceElement[] stackTrace = new Throwable().getStackTrace();
String name = stackTrace[1].getClassName();
System.out.println(name);

请参阅Filter dict to contain only certain keys?了解详情

答案 2 :(得分:0)

d1 = { k:dico[k] for k in ['GA2','GA6','GA10'] }
print (d1)

输出:

{'GA2': {'main': 1, 'middle': 1, 'sub': 2}, 'GA6': {'main': 1, 'middle': 1, 'sub': 6}, 'GA10': {'main': 1, 'middle': 1, 'sub': 10}}