簡體   English   中英

使用 python 在字典列表中打印字典元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM