基于多个值条件打印字典键[重复]
Posted
技术标签:
【中文标题】基于多个值条件打印字典键[重复]【英文标题】:Printing dictionary keys based on multiple value conditions [duplicate] 【发布时间】:2019-06-20 02:22:29 【问题描述】:我有一个字典,每个键都有两个值,例如:
my_dict = 'Stock A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)
如果两个值都满足特定要求,我想做的是返回字典键。因此,假设我希望每个键的第一个值超过 30,第二个值低于 0.6。这两个条件都需要满足才能返回密钥。所以在这种情况下,我希望股票 A 和股票 D 被退回。我很高兴单独打印键,但如果有办法用键和两个值附加一个新字典,那就太好了。由于我对字典的了解非常不完整,我的价值观没有标题,它们只是价值观,只是为了让事情变得更加困难。
我设想使用的代码类似于:
if value in my_dict > 30 and second value in my_dict < 0.6:
new_dict.append(key: value, second value)
我对这种尝试完全不准确感到很尴尬,但我只是不知道如何解决这个问题。
【问题讨论】:
【参考方案1】:试试这个代码
my_dict = 'Stock A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)
new=
for (stock,values) in my_dict.items():
first=values[0]
second=values[1]
if (first>30 and second<0.6):
new[name]=(first,second)
希望对你有帮助
【讨论】:
【参考方案2】:您可以使用字典推导创建一个新的字典。
my_dict = 'Stock A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)
new_dict = k:v for k,v in my_dict.items() if v[0]>30 and v[1] <0.6
print (new_dict)
结果:
'Stock A': (100, 0.5), 'Stock D': (45, 0.3)
【讨论】:
【参考方案3】:my_dict = 'Stock A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)
result=key:value for key,value in my_dict.items() if value[0]>30 and value[1]<.6
print(result)
输出:
'Stock A': (100, 0.5), 'Stock D': (45, 0.3)
【讨论】:
【参考方案4】:您需要使用.items() 对dict 进行迭代,然后您可以将元组解包为2 个变量(firstVal
、secondVal
):
my_dict = 'Stock A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)
new_dict =
for key, v in my_dict.items():
firstVal, secondVal = v
if firstVal > 30 and secondVal < 0.6:
new_dict[key] = v
print new_dict
打印:
'Stock D': (45, 0.3), 'Stock A': (100, 0.5)
【讨论】:
【参考方案5】:用list comprehensions
创建这个dictionary
-
my_dict = 'Stock A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)
my_dict_out = dict([ (k,r) for k,r in my_dict.items() if r[0]>30 and r[1] <0.6])
print(my_dict_out)
'Stock A': (100, 0.5), 'Stock D': (45, 0.3)
注意:这个答案被标记了很多次negative
,因为我使用.iteritems()
而不是.items()
,它不适用于Python 3.+
。因此,如果您使用的是Python 2.+
,则使用.iteritems()
,否则使用.items()
。
【讨论】:
【参考方案6】:my_dict = 'Stock_A': (100, 0.5), 'Stock B': (20, 0.9), 'Stock C': (40, 0.75), 'Stock D': (45, 0.3)
new_dict = # Dictionary in which the TRUE conditions are stores
# Function which makes the comparison
def comp(Val1,Val2):
Values = [30,0.6]
if Val1 > Values[0] and Val2 < Values[1]:
return True,(Val1,Val2)
else:
return False,None
# Creates the new dictionary
for key in my_dict:
Res = comp(my_dict[key][0],my_dict[key][1])
if Res[0]:
new_dict[key] = Res[1]
print(new_dict)
'Stock_A': (100, 0.5), 'Stock D': (45, 0.3)
【讨论】:
以上是关于基于多个值条件打印字典键[重复]的主要内容,如果未能解决你的问题,请参考以下文章