Python3-嵌套列表/字典迭代
在mongodb请求之后,我得到了如下文档:Python3-嵌套列表/字典迭代,python,python-3.x,Python,Python 3.x,在mongodb请求之后,我得到了如下文档: a = [{"name": 'Aspirin', "Dates": [{'Qty': 50, 'Date':'2019-07-09'}, {'Qty': 10, 'Date': '2020-05-19'}]}] 我想检索与日期2019-07-09相关的数量50。我是这样做的: old_qte = None for i in a: for key, value in i.items(): if value == 'Aspiri
a = [{"name": 'Aspirin', "Dates": [{'Qty': 50, 'Date':'2019-07-09'}, {'Qty': 10, 'Date': '2020-05-19'}]}]
我想检索与日期2019-07-09相关的数量50。我是这样做的:
old_qte = None
for i in a:
for key, value in i.items():
if value == 'Aspirin':
for k, v in i.items():
if k == 'Dates':
for z in v:
for x, y in z.items():
if y == '2019-07-09':
old_qte = z
print(old_qte['Qty'], old_qte)
它工作得很好,但看起来很复杂。有人会有一个更简单、更易读的方法吗?看起来你需要
a = [{"libelle": 'Aspirine', "Dates": [{'Qte': 50, 'Date':'2019-07-09'}, {'Qte': 10, 'Date': '2020-05-19'}]}]
old_qte = None
for i in a:
if 'Aspirine' in i.values():
for j in i["Dates"]:
if j["Date"] == '2019-07-09':
old_qte = j["Qte"]
break
print(old_qte)
您可以使用dict理解将结果重新格式化为更易于访问的dict(名称->日期->数量)
a=[{“名称”:“阿司匹林”,“日期”:[{“数量”:50,“日期”:2019-07-09},{“数量”:10,“日期”:2020-05-19}]
d={entry[“name”]:{inner[“Date”]:inner[“Qty”]表示inner in entry[“Dates”]}表示a}
印刷品(d)
打印(d[“阿司匹林”][“2019-07-09”])
这只需一行代码即可实现:
next(date for date in a[0]['Dates'] if date['Date'] == '2019-07-09')['Qty']
#50
将仅获取满足条件的第一个,并从中获取
数量。您可以使用数据管道,首先筛选阿司匹林
,然后检查日期:
# select 'Aspirin'
r1 = (dct for dct in a if dct["name"] == "Aspirin")
# unpack 'Dates' lists
r2 = (date for item in r1 for date in item["Dates"])
# select date
r3 = (dct for dct in r2 if dct["Date"] == "2019-07-09")
next(r3) # {'Qty': 50, 'Date': '2019-07-09'}
除了在找到目标后中断搜索之外,这里没有太多需要修剪的地方。通过进行适当的MongoDb查询?