繁体   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