如何在python中向多级字典添加多个值
我试着用橡胶做这个,但我放弃了。我不明白为什么这件事总是让我失望。我有以下字典模板,我想填写如何在python中向多级字典添加多个值,python,dictionary,dictionary-comprehension,Python,Dictionary,Dictionary Comprehension,我试着用橡胶做这个,但我放弃了。我不明白为什么这件事总是让我失望。我有以下字典模板,我想填写 testfile = {'locations': {'location_name1": {'document_title1': 'title_value1', 'page_nr1': 'text_value1'} }} 我有下面的代码尝试在其中插入多个值。这表示我当前正在使用的代码 testfile =
testfile = {'locations':
{'location_name1":
{'document_title1': 'title_value1',
'page_nr1': 'text_value1'}
}}
我有下面的代码尝试在其中插入多个值。这表示我当前正在使用的代码
testfile = {}
locatie = 0
while location != 5:
page_nr = 0
while page_nr != 3:
testfile = testfile + {'location':{'location_naam' + str(location):
{'page_nr' + str(page_nr):'text_value'+ str(pagina_nr)}}}
page_nr += 1
location += 1
这会导致每次循环代码都覆盖testfile。但是我想添加这些值,基本上得到3个位置名,每个位置名有5个文档名/页面名
我如何做到这一点
编辑
期望的输出是
{'location':
{'location_naam0': {
'page_nr0': 'text_value0',
'page_nr1': 'text_value1',
'page_nr1': 'text_value1'}},
{'location_naam1': {
'page_nr0': 'text_value0',
'page_nr1': 'text_value1',
'page_nr1': 'text_value1'}},
{'location_naam2': {
'page_nr0': 'text_value0',
'page_nr1': 'text_value1',
'page_nr1': 'text_value1'}},
{'location_naam3': {
'page_nr0': 'text_value0',
'page_nr1': 'text_value1',
'page_nr1': 'text_value1'}},
{'location_naam4': {
'page_nr0': 'text_value0',
'page_nr1': 'text_value1',
'page_nr1': 'text_value1'}}
}
在这里,我解决了一个问题,就像列出所有的格言:
testfile = []
location = 0
while location != 5:
page_nr = 0
while page_nr != 3:
testfile.append( {'location':{'location_naam' +str(location):
{'page_nr' +str(page_nr):'text_value'+str(pagina_nr)}}})
page_nr += 1
location += 1
print(testfile)
它的O/p类似于:
[{'location': {'location_naam0': {'page_nr0': 'text_value0'}}},
{'location': {'location_naam0': {'page_nr1': 'text_value1'}}},
{'location': {'location_naam0': {'page_nr2': 'text_value2'}}},
{'location': {'location_naam1': {'page_nr0': 'text_value0'}}},
{'location': {'location_naam1': {'page_nr1': 'text_value1'}}},
{'location': {'location_naam1': {'page_nr2': 'text_value2'}}},
{'location': {'location_naam2': {'page_nr0': 'text_value0'}}},
{'location': {'location_naam2': {'page_nr1': 'text_value1'}}},
{'location': {'location_naam2': {'page_nr2': 'text_value2'}}},
{'location': {'location_naam3': {'page_nr0': 'text_value0'}}},
{'location': {'location_naam3': {'page_nr1': 'text_value1'}}},
{'location': {'location_naam3': {'page_nr2': 'text_value2'}}},
{'location': {'location_naam4': {'page_nr0': 'text_value0'}}},
{'location': {'location_naam4': {'page_nr1': 'text_value1'}}},
{'location': {'location_naam4': {'page_nr2': 'text_value2'}}}]
在这里,我解决了一个问题,就像列出所有的格言:
testfile = []
location = 0
while location != 5:
page_nr = 0
while page_nr != 3:
testfile.append( {'location':{'location_naam' +str(location):
{'page_nr' +str(page_nr):'text_value'+str(pagina_nr)}}})
page_nr += 1
location += 1
print(testfile)
它的O/p类似于:
[{'location': {'location_naam0': {'page_nr0': 'text_value0'}}},
{'location': {'location_naam0': {'page_nr1': 'text_value1'}}},
{'location': {'location_naam0': {'page_nr2': 'text_value2'}}},
{'location': {'location_naam1': {'page_nr0': 'text_value0'}}},
{'location': {'location_naam1': {'page_nr1': 'text_value1'}}},
{'location': {'location_naam1': {'page_nr2': 'text_value2'}}},
{'location': {'location_naam2': {'page_nr0': 'text_value0'}}},
{'location': {'location_naam2': {'page_nr1': 'text_value1'}}},
{'location': {'location_naam2': {'page_nr2': 'text_value2'}}},
{'location': {'location_naam3': {'page_nr0': 'text_value0'}}},
{'location': {'location_naam3': {'page_nr1': 'text_value1'}}},
{'location': {'location_naam3': {'page_nr2': 'text_value2'}}},
{'location': {'location_naam4': {'page_nr0': 'text_value0'}}},
{'location': {'location_naam4': {'page_nr1': 'text_value1'}}},
{'location': {'location_naam4': {'page_nr2': 'text_value2'}}}]
我用这段代码解决了这个问题。我基本上在字典中添加了列表,以使一切正常
while x != 4: # documentniveau
results[0]['locaties'].append({'locatie' + str(x): []})
y = 0
while y != 2: # paginaniveau
results[0]['locaties'][x]['locatie'+str(x)].append({'pagenr': y})
y += 1
x += 1
输出:
[
{
"locaties": [
{
"locatie0": [
{
"pagenr": 0
},
{
"pagenr": 1
}
]
},
{
"locatie1": [
{
"pagenr": 0
},
{
"pagenr": 1
}
]
},
{
"locatie2": [
{
"pagenr": 0
},
{
"pagenr": 1
}
]
},
{
"locatie3": [
{
"pagenr": 0
},
{
"pagenr": 1
}
]
}
]
}
]
我用这段代码解决了这个问题。我基本上在字典中添加了列表,以使一切正常
while x != 4: # documentniveau
results[0]['locaties'].append({'locatie' + str(x): []})
y = 0
while y != 2: # paginaniveau
results[0]['locaties'][x]['locatie'+str(x)].append({'pagenr': y})
y += 1
x += 1
输出:
[
{
"locaties": [
{
"locatie0": [
{
"pagenr": 0
},
{
"pagenr": 1
}
]
},
{
"locatie1": [
{
"pagenr": 0
},
{
"pagenr": 1
}
]
},
{
"locatie2": [
{
"pagenr": 0
},
{
"pagenr": 1
}
]
},
{
"locatie3": [
{
"pagenr": 0
},
{
"pagenr": 1
}
]
}
]
}
]
这是你想要的吗
print({
'location': {
"location_naam{}".format(i): {
"page_nr{}".format(k): "text_value{}".format(k)
for k in range(2)
}
for i in range(4)
}
})
out:
{
"location": {
"location_naam0": {
"page_nr0": "text_value0",
"page_nr1": "text_value1"
},
"location_naam1": {
"page_nr0": "text_value0",
"page_nr1": "text_value1"
},
"location_naam2": {
"page_nr0": "text_value0",
"page_nr1": "text_value1"
},
"location_naam3": {
"page_nr0": "text_value0",
"page_nr1": "text_value1"
}
}
}
这是你想要的吗
print({
'location': {
"location_naam{}".format(i): {
"page_nr{}".format(k): "text_value{}".format(k)
for k in range(2)
}
for i in range(4)
}
})
out:
{
"location": {
"location_naam0": {
"page_nr0": "text_value0",
"page_nr1": "text_value1"
},
"location_naam1": {
"page_nr0": "text_value0",
"page_nr1": "text_value1"
},
"location_naam2": {
"page_nr0": "text_value0",
"page_nr1": "text_value1"
},
"location_naam3": {
"page_nr0": "text_value0",
"page_nr1": "text_value1"
}
}
}
我认为最好将
testfile
声明为list并每次追加dict。您想要的输出在dictionary中有重复的键,这是不可能的。@Adam:请看我的答案。.我认为最好将testfile
声明为list并每次追加dict。您想要的输出在dictionary中有重复的键,而dictionary中没有可能。@Adam:请看我的答案。..OIs可以在同一个键下合并页面的值吗?所以它只输出5个位置名称,而不是15个?为了这个有代表性的代码,它可以工作,但实时版本每个位置有20多页,这将用不必要的额外行填充目录扫描你然后添加一个样本o/p。我仍然只使用了你的逻辑,我所做的只是将您的所有DICT分组到一个列表中。如果您在我的问卷中对您的o/填充所需的输出有更多的了解,我们可以帮助您将页面的值合并到同一个键下吗?所以它只输出5个位置名称,而不是15个?为了这个有代表性的代码,它可以工作,但实时版本每个位置有20多页,这将用不必要的额外行填充目录扫描你然后添加一个样本o/p。我仍然只使用了你的逻辑,我所做的只是将您的所有DICT分组到一个列表中。如果您在我的问题中提供更多关于您的o/填充所需输出的想法,我们可以帮助您,但这不是您在问题中所期望的。但这不是您在问题中所期望的。这是我问题的正确解决方案。非常感谢你!这是解决我问题的正确方法。非常感谢你!