我创建的字典如下所示:
DictItems = {
'Rule1' : {1 : [S1, S2, S3], 2 : [S4, S5], 3: [S8]},
'Rule2' : {1 : [S2, S3], 2 : [S2, S4, S5]}
}
我尝试了以下内容:
for key, value, listval in DictItems.items():
print key, value, listval
但它显示错误:" ValueError: need more than 2 values to unpack
"。
如何访问要操作的各个项目
单个项目表示:我想检查关联规则。所以我想访问个别项目,例如' Rule1'在if条件中,然后检查下一个字典中的值,例如1或2,以及列表项。
答案 0 :(得分:2)
我认为你过于复杂了。
鉴于这个词:
>>> DictItems = {
... 'Rule1' : {1 : ['S1', 'S2', 'S3'], 2 : ['S4', 'S5'], 3: ['S8']},
... 'Rule2' : {1 : ['S2', 'S3'], 2 : ['S2', 'S4', 'S5']}
... }
您可以使用一个或多个括号中的键(用于dict)或索引(用于序列)访问单个元素(成对括号:[]
是AKA subscriptions或{{3 }}):
>>> DictItems['Rule1']
{1: ['S1', 'S2', 'S3'], 2: ['S4', 'S5'], 3: ['S8']}
>>> DictItems['Rule1'][1]
['S1', 'S2', 'S3']
>>> DictItems['Rule1'][1][-1]
'S3'
>>> DictItems['Rule1'][1][-1][0]
'S'
在那里解剖最后一个:
DictItems['Rule1'][1][-1][0]
^^^ key to the top dict
^ key to dict with int key
^^ relative index to a sequence -- last one
^ absolute index to a sequence -- first item
然后打印:
>>> for k, li in DictItems['Rule1'].items():
... print k, li
...
1 ['S1', 'S2', 'S3']
2 ['S4', 'S5']
3 ['S8']
访问和比较例如:
>>> DictItems['Rule1'][1][2]==DictItems['Rule2'][1][-1]
True
如果要解压缩示例,请使用嵌套循环:
>>> for k in DictItems:
... for sk, li in DictItems[k].items():
... print k, sk, li
...
Rule2 1 ['S2', 'S3']
Rule2 2 ['S2', 'S4', 'S5']
Rule1 1 ['S1', 'S2', 'S3']
Rule1 2 ['S4', 'S5']
Rule1 3 ['S8']
由于dicts是无序的,因此这些项目不一定按照插入顺序排序。您可以对键进行排序:
>>> for k in sorted(DictItems):
... for sk in sorted(DictItems[k]):
... print k, sk, DictItems[k][sk]
...
Rule1 1 ['S1', 'S2', 'S3']
Rule1 2 ['S4', 'S5']
Rule1 3 ['S8']
Rule2 1 ['S2', 'S3']
Rule2 2 ['S2', 'S4', 'S5']
您还可以使用__getitem__
operator来打印嵌套字典:
>>> import json
>>> print json.dumps(DictItems, sort_keys=True, indent=4)
{
"Rule1": {
"1": [
"S1",
"S2",
"S3"
],
"2": [
"S4",
"S5"
],
"3": [
"S8"
]
},
"Rule2": {
"1": [
"S2",
"S3"
],
"2": [
"S2",
"S4",
"S5"
]
}
}
答案 1 :(得分:1)
dict.items()
会为您提供(key, value)
对,并且不会进一步解压缩所包含的词典。
您只能 解压缩密钥和值,其中值是此处的另一个字典对象。要进入嵌套字典,也可以迭代,也许:
for rule, rule_mapping in DictItems.items():
print rule
for rulemap_number, listvalue in rule_mapping.items():
print '{}: {}'.format(rulemap_number, listvalue)
答案 2 :(得分:0)
要回答你的问题,你可以在原始循环中嵌套另一个循环,如下所示:
for key, value in DictItems.items():
print key
for key2, value2 in value.items():
print key2, value2
依此类推,尽可能多地降低等级。如果你想获得幻想,你可以在那里得到所有的递归,但是两个级别就足够了。
NB。忽略我不使用的命名约定:P
答案 3 :(得分:0)
for rule_num, group in DictItems.items():
print rule_num
for index, lst in group.items():
print " %s: %s" % (index, lst)
...
Rule2
1: ['S2', 'S3']
2: ['S2', 'S4', 'S5']
Rule1
1: ['S1', 'S2', 'S3']
2: ['S4', 'S5']
3: ['S8']