[英]print dictionary element in a list of dictionaries using python
我有一個包含多個字典的列表 - 該列表如下所示:
[{'DeltaG': -9.82, 'BasePairs': 4}, {'DeltaG': -9.25, 'BasePairs': 6}, {'DeltaG': -8.96, 'BasePairs': 8}]
如果找到BasePairs
== 6,我想要做的是打印DeltaG
值。 如果未找到BasePairs
== 6,則打印第一個deltaG
< 6 的BasePairs
:
我嘗試了下面的代碼,但它給出了第一個 BasePairs == 4 的 DeltaG= -9.82,而它應該首先搜索是否有 BasePiars== 6。
for tuple in results:
if float(tuple["BasePairs"]) == 6:
deltaG = float(tuple["DeltaG"])
print(deltaG)
else:
if float(tuple["BasePairs"]) < 6:
deltaG = float(tuple["DeltaG"])
print(deltaG)
任何人都可以幫助我嗎? 謝謝
您可以將 next 與默認值一起使用
next(
(i["DeltaG"] for i in results if i["BasePairs"] == 6),
next(
(i["DeltaG"] for i in results if i["BasePairs"] < 6), None
)
)
這將搜索您的字典列表中具有 6 個鹼基對的第一個值,如果它沒有找到,它會返回一個鹼基對小於 6 的第一個值(如果沒有找到,則返回 None)
從您的代碼開始,您可以檢查如下內容:
found = False
for tup in results:
if float(tup["BasePairs"]) < 6 and not found:
deltaG = float(tup["DeltaG"])
found = True
if float(tup["BasePairs"]) == 6:
deltaG = float(tup["DeltaG"])
break
print(deltaG)
或者,如果您想使用較小的值:
min_base_pairs_val = float('inf')
for tup in results:
if float(tup["BasePairs"]) < min_base_pairs_val:
deltaG = float(tup["DeltaG"])
min_base_pairs_val = float(tup["BasePairs"])
if float(tup["BasePairs"]) == 6:
deltaG = float(tup["DeltaG"])
break
print(deltaG)
注意,不要使用tuple
作為變量名,因為它是 Python 中的 function。
我會使用列表理解來獲取所有 BasePairs 值,然后我會查看 6 ( threshold
)是否在其中。 如果是,我可以獲得它的索引並訪問它的“DeltaG”值,否則我返回第一個“DeltaG”,其中 value < threshold
。
代碼:
results = [{'DeltaG': -9.82, 'BasePairs': 4},
{'DeltaG': -9.25, 'BasePairs': 6},
{'DeltaG': -8.96, 'BasePairs': 8}]
threshold = 6
x = [d['BasePairs'] for d in results]
if threshold in x:
print(results[x.index(threshold)]['DeltaG'])
else:
i = 0
for v in x:
if v < threshold:
print(results[x.index(v)]['DeltaG'])
break
i +=1
Output :
-9.25
讓我們嘗試不同的值。 我將第一個“BasePairs”修改為 18,然后嘗試不同的閾值。
results = [{'DeltaG': -9.82, 'BasePairs': 18},
{'DeltaG': -9.25, 'BasePairs': 6},
{'DeltaG': -8.96, 'BasePairs': 2}]
threshold = 8
-9.25
threshold = 5
-8.96
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.