如何通过指定值范围从字典中提取数据?

时间:2017-04-15 20:53:14

标签: python dictionary range

我有一本字典,

{"apple" : "20", "orange" : "40", "banana" : "25", "mango" : "50"} 

我想从这个字典中提取数据,其值在20 - 30范围内。

实施例。我希望输出应该是

apple:20   
banana:25 

我正在考虑先按值排序字典,但它似乎不起作用。

我试过dict= sorted(dict.items(), key=lambda t: t[1])
但输出显示如下:

[("apple", "20"), ("orange" , "40"), ("banana" , "25"), ("mango" , "50")]

如何获得输出:

apple:20   
banana:25

7 个答案:

答案 0 :(得分:3)

您可以执行以下操作:

> d = {"apple" : "20", "orange" : "40", "banana" : "25", "mango" : "50"}
> for item in sorted(d.items(), key=lambda i: int(i[1])):
>   print ': '.join(item)
apple: 20
banana: 25
orange: 40
mango: 50

sorted使用特定排序key按值对dict项(键值tuples)进行排序。

答案 1 :(得分:2)

sample_dict={"apple" : "20", "orange" : "40", "banana" : "25", "mango" : "50"}
for name,num in sample_dict.items():
    if int(num) in range(20,31):
        print('%s: %s' %(name,num))

答案 2 :(得分:1)

d = {"apple" : "20", "orange" : "40", "banana" : "25", "mango" : "50"}

for k, v in d.items():
    if 20 <= int(v) <= 30:
        print(k, ':', v, sep='')

打印

apple:20
banana:25

答案 3 :(得分:1)

使用列表理解,您可以提取(key,values)它们的值(首次转换为int)在20-30范围内:

d = {"apple" : "20", "orange" : "40", "banana" : "25", "mango" : "50"}
[(k,v) for k,v in d.items() if  20 <= int(v) <= 30]
# [('banana', '25'), ('apple', '20')]

然后你可以得到你想要的输出。

答案 4 :(得分:0)

返回字典{'apple': '20', 'banana': '25'}

>>> d = {"apple" : "20", "orange" : "40", "banana" : "25", "mango" : "50"} >>> {key: val for key,val in d.items() if 20 <= int(val) <= 30} {'apple': '20', 'banana': '25'}

答案 5 :(得分:0)

使用字典理解:

the_dict = {"apple" : "20", "orange" : "40", "banana" : "25", "mango" : "50"}

new_dict = {the_dict.keys()[i]:the_dict.values()[i] for i in range(len(the_dict.values())) if int(the_dict.values()[i]) <= 30 and    int(the_dict.values()[i] >= 20)}

print new_dict

答案 6 :(得分:0)

您可以使用set获取快速成员资格测试。这样做也消除了将字典值转换为整数的需要,因为set的成员是字符串:

d = {"apple": "20", "orange": "40", "banana": "25", "mango": "50"}
limits = set(str(n) for n in range(20, 31))

for key, value in sorted(d.items()):
    if value in limits:
        print('{}:{}'.format(key, value))