我有多個字典,我想使用 python 將鍵/值附加并存盤到串列中。我已經完成了這一點,但我遇到的問題是偶然發現一個字典,該字典在另一個字典中具有鍵和值。例如:下面的代碼遍歷每個字典,然后將它們附加到一個字典中,如下所示。
[
{
'disabled': False,
'id': '13456',
'self': 'https://gooogle.com/customFieldOption/13456',
'value': 'Food'
},
{
'disabled': False,
'id': '14532',
'self': 'https://gooogle.com/customFieldOption/14532',
'value': 'Dessert'
}
]
然后,我遍歷上述帶有相同鍵值對的字典,并將每個字典附加到一個串列中。我將相同的鍵值對存盤到串列中。下面顯示了輸出。
defaultdict(<class'list'>,
{
'disabled': [
False,
False
],
'id': [
'13456',
'14532'
],
'self': [
'https://gooogle.com/customFieldOption/13456',
'https://gooogle.com/customFieldOption/14532'
],
'value': [
'Food',
'Dessert'
]
})
現在我遇到的問題是在字典中遇到一個也有鍵值對的字典。如下所示:
[
{
'fields': {
'issuetype': {
'id': '23434',
'name': 'Food',
'self': 'www.google.com/23434',
},
'priority': {
'id': '12345',
'name': 'Dessert',
'self': 'www.google.com/12345'
},
'status': {
'id': '15432',
'name': 'To Do',
'self': 'www.google.com/status/15432',
'statusCategory': {
'id': 2,
'key': 'new',
'name': 'To Do',
'self': 'www.google.com/statuscategory/2'
}
},
'summary': 'PL-Bus-ICD-1882'
},
'id': '12356',
'key': 'eed-1234',
'self': 'www.google.com/issue/12356'
},
{
'fields': {
'issuetype': {
'id': '11200',
'name': 'House',
'self': 'www.google.com/issuetype/11200',
},
'priority': {
'id': '123400',
'name': 'Nonessential',
'self': 'www.google.com/priority/123400'
},
'status': {
'id': '10035',
'name': 'To Do',
'self': 'www.google.com/status/10035',
'statusCategory': {
'id': 2,
'key': 'new',
'name': 'To Do',
'self': 'www.google.com/statuscategory/2'
}
},
'summary': 'PL-Bus-ICD-1885'
},
'id': '34262',
'key': 'ekr-1254',
'self': 'www.google.com/issue/34262'
}
]
elif(key == 'customfield_12604'):
if(oIssues[key] == None):
values = {'name': None }
issueRequirementDictNone = dict(values)
iterateDictIssues(issueRequirementDictNone, listInner)
else:
newDictionaryValuesRequirement = []
for requirementID in oIssues['customfield_12604']:
if(len(oIssues[key]) == 1):
values = requirementID
issueRequirementID = dict(values)
iterateDictIssues(issueRequirementID, listInner)
else:
values = requirementID
newDictionaryValuesRequirement.append(values)
if(len(newDictionaryValuesRequirement) == len(oIssues[key])):
print(newDictionaryValuesRequirement)
d = defaultdict(list)
for dictionary in newDictionaryValuesRequirement:
for k, v in dictionary.items():
d[k].append(v)
values = d
print(values)
issueRequirementDictID = dict(values)
iterateDictIssues(issueRequirementDictID, listInner)
我的代碼似乎沒有遍歷額外的字典鍵。我想通過問題型別、優先級和狀態鍵/值對追加到顯示單個字典的單個串列中來完成與上面的輸出相同的結果。當我使用上面的字典運行相同的代碼時,它只存盤下面的鍵/值對,因為它們在欄位字典中。我需要遍歷我假設的其他字典。謝謝你。
uj5u.com熱心網友回復:
遞回方法在這里效果很好。
您可以迭代data并呼叫一個遞回函式merge,該函式接受一個字典d并將其合并到另一個merged匹配鍵的字典中。每個dict值都會d導致另一個遞回呼叫,而其他值會附加到相應鍵的值上。
def merge(d, merged):
for k, v in d.items():
if isinstance(v, dict):
merge(v, merged.setdefault(k, {}))
else:
merged.setdefault(k, []).append(v)
out = {}
for d in data:
merge(d, out)
輸出:
{'fields': {'issuetype': {'id': ['23434', '11200'],
'name': ['Food', 'House'],
'self': ['www.google.com/23434', 'www.google.com/issuetype/11200']},
'priority': {'id': ['12345', '123400'],
'name': ['Dessert', 'Nonessential'],
'self': ['www.google.com/12345', 'www.google.com/priority/123400']},
'status': {'id': ['15432', '10035'],
'name': ['To Do', 'To Do'],
'self': ['www.google.com/status/15432', 'www.google.com/status/10035'],
'statusCategory': {'id': [2, 2],
'key': ['new', 'new'],
'name': ['To Do', 'To Do'],
'self': ['www.google.com/statuscategory/2',
'www.google.com/statuscategory/2']}},
'summary': ['PL-Bus-ICD-1882', 'PL-Bus-ICD-1885']},
'id': ['12356', '34262'],
'key': ['eed-1234', 'ekr-1254'],
'self': ['www.google.com/issue/12356', 'www.google.com/issue/34262']}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/412412.html
標籤:
