如何从嵌套在两个列表中的字典中获取值?
How to get the values from a dictionary nested within two lists?
我仍在熟悉 python 和使用 API。我从 API:
中提取了以下数据
[[{'term': 'Boys', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300247598'},
{'term': 'Fish', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300266085'},
{'term': 'Boats', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300178749'}],
[{'term': 'Bears', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300266516'}],
None,
[{'term': 'Interiors',
'AAT_URL': 'http://vocab.getty.edu/page/aat/300391239'},
{'term': 'Jewelry', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300209286'},
{'term': 'Couples', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300379217'},
{'term': 'Men', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300025928'},
{'term': 'Women', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300025943'},
{'term': 'Weights and Measures',
'AAT_URL': 'http://vocab.getty.edu/page/aat/300386648'}],
...]
我想在这样的最终列表中提取 'term' 键中的值(但保留子列表):
[['Boys','Fish','Boats'],['Bears'],['Interiors','Jewlery','Couples','Men','Women','Weights and Measures']...]
每当我尝试像这样迭代列表时:
for x in tags:
for y in x:
print (y['term'])
我得到以下结果:
Boys
Fish
Boats
Bears
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-48-f2ff632ad612> in <module>
11
12 for x in tags:
---> 13 for y in x:
14 print (y['term'])
TypeError: 'NoneType' object is not iterable
我该如何解决?提前谢谢你 c:
在迭代之前检查 x
与 None
:
for x in tags:
if x is not None:
for y in x:
print (y['term'])
如果你看到你从API中提取的数据中也有一个None的元素。所以你必须检查你在迭代时没有遇到那个。
for x in tags:
if(x is not None):
for y in x:
print(y['term'])
这将解决问题
要将数据提取到相同结构的列表中,请检查 None
并仅在您有数据时添加内容:
data = [[{'term': 'Boys', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300247598'},
{'term': 'Fish', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300266085'},
{'term': 'Boats', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300178749'}],
[{'term': 'Bears', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300266516'}],
None,
[{'term': 'Interiors', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300391239'},
{'term': 'Jewelry', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300209286'},
{'term': 'Couples', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300379217'},
{'term': 'Men', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300025928'},
{'term': 'Women', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300025943'},
{'term': 'Weights and Measures', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300386648'}]]
result = []
for inner_list in data:
if inner_list: # None and [] are falsy, ignore them
# got something, add a new empty list to add things into
result.append([])
for d in inner_list:
# add all dicts term to the last item of result
result[-1].append(d["term"])
print(result)
将输出:
[['Boys', 'Fish', 'Boats'], ['Bears'],
['Interiors', 'Jewelry', 'Couples', 'Men', 'Women', 'Weights and Measures']]
先过滤掉None再使用map函数
data = [
[
{"term": "Boys", "AAT_URL": "http://vocab.getty.edu/page/aat/300247598"},
{"term": "Fish", "AAT_URL": "http://vocab.getty.edu/page/aat/300266085"},
{"term": "Boats", "AAT_URL": "http://vocab.getty.edu/page/aat/300178749"},
],
[{"term": "Bears", "AAT_URL": "http://vocab.getty.edu/page/aat/300266516"}],
None,
[
{"term": "Interiors", "AAT_URL": "http://vocab.getty.edu/page/aat/300391239"},
{"term": "Jewelry", "AAT_URL": "http://vocab.getty.edu/page/aat/300209286"},
{"term": "Couples", "AAT_URL": "http://vocab.getty.edu/page/aat/300379217"},
{"term": "Men", "AAT_URL": "http://vocab.getty.edu/page/aat/300025928"},
{"term": "Women", "AAT_URL": "http://vocab.getty.edu/page/aat/300025943"},
{"term": "Weights and Measures", "AAT_URL": "http://vocab.getty.edu/page/aat/300386648"},
],
]
result = map(lambda x: list(map(lambda i: i["term"], x)), filter(lambda x: x is not None, data))
print(list(result))
我仍在熟悉 python 和使用 API。我从 API:
中提取了以下数据 [[{'term': 'Boys', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300247598'},
{'term': 'Fish', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300266085'},
{'term': 'Boats', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300178749'}],
[{'term': 'Bears', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300266516'}],
None,
[{'term': 'Interiors',
'AAT_URL': 'http://vocab.getty.edu/page/aat/300391239'},
{'term': 'Jewelry', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300209286'},
{'term': 'Couples', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300379217'},
{'term': 'Men', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300025928'},
{'term': 'Women', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300025943'},
{'term': 'Weights and Measures',
'AAT_URL': 'http://vocab.getty.edu/page/aat/300386648'}],
...]
我想在这样的最终列表中提取 'term' 键中的值(但保留子列表):
[['Boys','Fish','Boats'],['Bears'],['Interiors','Jewlery','Couples','Men','Women','Weights and Measures']...]
每当我尝试像这样迭代列表时:
for x in tags:
for y in x:
print (y['term'])
我得到以下结果:
Boys
Fish
Boats
Bears
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-48-f2ff632ad612> in <module>
11
12 for x in tags:
---> 13 for y in x:
14 print (y['term'])
TypeError: 'NoneType' object is not iterable
我该如何解决?提前谢谢你 c:
在迭代之前检查 x
与 None
:
for x in tags:
if x is not None:
for y in x:
print (y['term'])
如果你看到你从API中提取的数据中也有一个None的元素。所以你必须检查你在迭代时没有遇到那个。
for x in tags:
if(x is not None):
for y in x:
print(y['term'])
这将解决问题
要将数据提取到相同结构的列表中,请检查 None
并仅在您有数据时添加内容:
data = [[{'term': 'Boys', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300247598'},
{'term': 'Fish', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300266085'},
{'term': 'Boats', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300178749'}],
[{'term': 'Bears', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300266516'}],
None,
[{'term': 'Interiors', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300391239'},
{'term': 'Jewelry', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300209286'},
{'term': 'Couples', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300379217'},
{'term': 'Men', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300025928'},
{'term': 'Women', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300025943'},
{'term': 'Weights and Measures', 'AAT_URL': 'http://vocab.getty.edu/page/aat/300386648'}]]
result = []
for inner_list in data:
if inner_list: # None and [] are falsy, ignore them
# got something, add a new empty list to add things into
result.append([])
for d in inner_list:
# add all dicts term to the last item of result
result[-1].append(d["term"])
print(result)
将输出:
[['Boys', 'Fish', 'Boats'], ['Bears'],
['Interiors', 'Jewelry', 'Couples', 'Men', 'Women', 'Weights and Measures']]
先过滤掉None再使用map函数
data = [
[
{"term": "Boys", "AAT_URL": "http://vocab.getty.edu/page/aat/300247598"},
{"term": "Fish", "AAT_URL": "http://vocab.getty.edu/page/aat/300266085"},
{"term": "Boats", "AAT_URL": "http://vocab.getty.edu/page/aat/300178749"},
],
[{"term": "Bears", "AAT_URL": "http://vocab.getty.edu/page/aat/300266516"}],
None,
[
{"term": "Interiors", "AAT_URL": "http://vocab.getty.edu/page/aat/300391239"},
{"term": "Jewelry", "AAT_URL": "http://vocab.getty.edu/page/aat/300209286"},
{"term": "Couples", "AAT_URL": "http://vocab.getty.edu/page/aat/300379217"},
{"term": "Men", "AAT_URL": "http://vocab.getty.edu/page/aat/300025928"},
{"term": "Women", "AAT_URL": "http://vocab.getty.edu/page/aat/300025943"},
{"term": "Weights and Measures", "AAT_URL": "http://vocab.getty.edu/page/aat/300386648"},
],
]
result = map(lambda x: list(map(lambda i: i["term"], x)), filter(lambda x: x is not None, data))
print(list(result))