Python3-嵌套列表/字典迭代

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

在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 == '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查询?