我有一个嵌套的字典,其中有我想要的顺序。但是,当我试图迭代其中的项时,尝试递增一个键,在第一个for循环中,对象的顺序已经按字母顺序排序,就抛出了递增。
given = {
"testC": { "0": { "ccc": ["c100"] } },
"testA": { "1": { "aaa": ["a100", "a200"] } },
"testB": { "2": { "bbb": [] }}
}
index_order = 0
for k1, k2 in given.items(): # the ordering is change here, where testA will reordered
for page_index_order in given[k1].keys():
var = given[k1][page_index_order]
if page_index_order != index_order:
index_order += 1
else:
index_order = page_index_order
given[k1][index_order] = var
given[k1].pop(page_index_order)
pprint(given)
'''
{'testA': {1: {'aaa': ['a100', 'a200']}},
'testB': {3: {'bbb': []}},
'testC': {2: {'ccc': ['c100']}}}
'''我希望我的结果是(排序相同,但请注意索引值,我希望testC为1,但它返回的是2):
{'testC': {1: {'ccc': ['c100']}},
'testA': {2: {'aaa': ['a100', 'a200']}},
'testB': {3: {'bbb': []}}}我尝试在第一个for循环中使用OrderedDict(given),但它返回一个排序字典。
发布于 2019-04-13 02:42:01
given = {
"testC": { "0": { "ccc": ["c100"] } },
"testA": { "1": { "aaa": ["a100", "a200"] } },
"testB": { "2": { "bbb": [] }}
}
given_keys = ["testC", "testA", "testB"] # decide order
sorted_given = OrderedDict([(k, given[k]) for k in given_keys])发布于 2019-04-13 03:06:09
如果您使用Python 3.7+或collections.OrderedDict,您的字典将被正确排序,但如果您在Python 3.7+中使用常规字典,问题将是pprint总是打印带有排序关键字的字典,没有不打印的选项。请改用print按实际顺序输出dict键:
given = {
"testC": { "0": { "ccc": ["c100"] } },
"testA": { "1": { "aaa": ["a100", "a200"] } },
"testB": { "2": { "bbb": [] }}
}
index_order = 0
for k1, k2 in given.items():
for page_index_order in list(given[k1]):
var = given[k1][page_index_order]
if page_index_order != index_order:
index_order += 1
else:
index_order = page_index_order
given[k1][index_order] = var
given[k1].pop(page_index_order)
print(given)这将输出(在Python 3.7中):
{'testC': {1: {'ccc': ['c100']}}, 'testA': {2: {'aaa': ['a100', 'a200']}}, 'testB': {3: {'bbb': []}}}或使用collections.OrderedDict
given = OrderedDict((
("testC", { "0": { "ccc": ["c100"] }}),
("testA", { "1": { "aaa": ["a100", "a200"] }} ),
("testB", { "2": { "bbb": [] }})
))
index_order = 0
for k1, k2 in given.items(): # the ordering is change here, where testA will reordered
for page_index_order in list(given[k1]):
var = given[k1][page_index_order]
if page_index_order != index_order:
index_order += 1
else:
index_order = page_index_order
given[k1][index_order] = var
given[k1].pop(page_index_order)
print(given)这将输出以下内容:
OrderedDict([('testC', {1: {'ccc': ['c100']}}), ('testA', {2: {'aaa': ['a100', 'a200']}}), ('testB', {3: {'bbb': []}})])https://stackoverflow.com/questions/55657647
复制相似问题