我实际上是在编写一个程序,它将使用给定嵌套字典中的信息自动生成pdf。我已经进行了广泛的搜索,找不到适合我需要的方法,并且很容易从外部角度看。我的主要问题和疑问是:
使用嵌套字典,其中一些键有多个值,怎么做 我是否按顺序完全提取相关信息?
为了演示问题和目标,我将使用我在上一个问题中使用的以下嵌套字典进行说明:
{'Earth':
{'Northern Hemisphere':
{'North America':
{'The United States of America':
{'California': 'Sacramento',
'Kentucky': 'Frankfurt',
'Colorado': 'Denver',
'Oregon': 'Salem',
'Florida': 'Tallahassee',
'Nevada': 'Carson City'
}
}
},
{'Canada':
{'Ontario': 'Toronto',
'Alberta': 'Edmonton',
'Manitoba': 'Winnipeg',
'Sasketchewan': 'Regina'
}
}
}
}
根据我的知识解决这个问题的最有效方法是使用for
循环遍历字典并沿途填写pdf。最终结果会像任意一样:
Begin PDF
Planet: 'Earth'
Section:'Northern Hemisphere'
Country: 'The United State of America'
SubCategory: 'California': 'Sacramento',
'Kentucky': 'Frankfurt',
'Colorado': 'Denver',
'Oregon': 'Salem',
'Florida': 'Tallahassee',
'Nevada': 'Carson City'
Planet: 'Earth'
Section: 'Northern Hemisphere'
Country: 'Canada'
SubCategory: 'Ontario': 'Toronto',
'Alberta': 'Edmonton',
'Manitoba': 'Winnipeg',
'Sasketchewan': 'Regina'
End PDF
格式化PDF不是我遇到的问题,我在某种程度上已经弄明白了。我的问题是理解如何阅读这个嵌套字典的方式,使Northern Hemisphere
之类的键被理解为附加了两个或更多的值,并且Earth
之类只有一个值的键被理解属于Country
个条目。
我希望我的问题清楚,任何帮助都表示赞赏。
答案 0 :(得分:1)
问题:...嵌套字典...我如何...以顺序方式提取...?
注意强>:
您的嵌套词典接近json
,为什么不使用JSON?
您的dict
无效,国家/地区 Canada
必须位于部分 Northern Hemisphere
内。
递归解决方案,使用GeneratorType
。
输出是dict
,其中包含keys
中给定键的所有值。
def Earth_nested_dict():
keys = ['Planet',' Section', None, ' Country', 'SubCategory']
_record = OrderedDict()
def _nested_dict(_dict, key, deep):
if isinstance(_dict, dict):
if keys[deep]:
_record[keys[deep]] = key
for k in _dict:
yield from _nested_dict(_dict[k], k, deep + 1)
else:
_record[keys[deep]] = '{}:{}'.format(key, _dict)
yield _record
yield from _nested_dict(nested_dict['Earth'], 'Earth', 0)
<强>用法:强>
for _record in Earth_nested_dict():
print(_record)
<强>输出强>:
OrderedDict([('Planet', 'Earth'), (' Section', 'Northern Hemisphere'), (' Country', 'The United States of America'), ('SubCategory', 'Oregon:Salem')]) ... (omitted for brevity) OrderedDict([('Planet', 'Earth'), (' Section', 'Northern Hemisphere'), (' Country', 'Canada'), ('SubCategory', 'Alberta:Edmonton')]) ... (omitted for brevity) OrderedDict([('Planet', 'Earth'), (' Section', 'Southern Hemisphere'), (' Country', 'Brazil'), ('SubCategory', 'Bahia:Salvador')])
使用Python测试:3.4.2