我知道这已经有很多问题了,我试着阅读其中大部分,但仍然遇到麻烦......
我有嵌套词典
city = {'centerLatitude': '40',
'centerLongitude': '-86',
'listings': {'A Name Here': {'address': 'the address',
'city': 'acity',
'distance': 'AmillionMiles',
'facility_id': '1234',
'latitude': '34',
'longitude': '-86',
'price': 'tooMuch',
'rating': 'supergreat',
'size': "10'xAz'",
'state': 'XY',
'zip': '50505'}}}
我有这个递归的python函数(取自另一篇文章)
def grab_children(father):
local_list = []
for key, value in father.iteritems():
local_list.append(key)
local_list.extend(grab_children(value))
return local_list
使用
调用该函数print grab_children(city)
我得到这个错误......而不是列表
Traceback (most recent call last):
File "<pyshell#19>", line 1, in <module>
print grab_children(city)
File "<pyshell#5>", line 5, in grab_children
local_list.extend(grab_children(value))
File "<pyshell#5>", line 3, in grab_children
for key, value in father.iteritems():
AttributeError: 'str' object has no attribute 'iteritems'
从错误中我认为当函数再次调用自身时使用的value
会发生一些事情,因为它看起来像是认为它是一个是的,没有.iteritems
,但是运行它并打印type(value)
它总是一本字典(就像它应该的那样)。
它适用于这本词典,也取自另一篇文章,我不明白这本词典的不同之处。
city = {'<Part: 1.1>': {'<Part: 1.1.1>': {'<Part: 1.1.1.1>': {}},
'<Part: 1.1.2>': {}},
'<Part: 1.2>': {'<Part: 1.2.1>': {}, '<Part: 1.2.2>': {}},
'<Part: 1.3>': {}}
我的问题是: 为什么我收到此错误?我如何克服错误?如果错误是由我的字典不同引起的,那又有什么不同呢?
答案 0 :(得分:3)
注意样本中“leaves”都是“{}”。这是一个空洞的词典。在你的“城市”,你的叶子是弦。要使用此函数,而不是:
city = {'centerLatitude': '40'}
你必须写:
city = { 'centerLatitude': { '40' : {} } }
等
但是这个问题主题是“列表列表”,这不是您的示例代码所做的。您的示例代码返回单个列表。所以我不确定你想要什么作为输出。
答案 1 :(得分:1)
your function should be changed to check if value is a dict, error
because you recursive function tries to run iteritems() on a value that isstring.
if isinstance(value,dict): clause need to be added to this recursive function.
Otherwise function eventually grabs a string..
change items() to iteritems() if not python 3
def grab_children(father):
local_list = []
for key, value in father.items():
local_list.append(key)
if isinstance(value,dict):
local_list.extend(grab_children(value))
return local_list
print(grab_children(city))
['centerLatitude', 'centerLongitude', 'listings', 'A Name Here', 'latitude', 'rating', 'zip', 'longitude', 'facility_id', 'size', 'city', 'distance', 'state', 'address', 'price']
答案 2 :(得分:0)
你永远不会停止。以下内容检索所有词典中的所有键:
def grab_children(father):
local_list = []
for key, value in father.iteritems():
local_list.append(key)
if type(value) is dict:
local_list.extend(grab_children(value))
return local_list