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