搜索具有特定字符串和值范围的列表字典python

时间:2017-03-24 15:46:54

标签: python dictionary search

我想通过指定

来搜索字典
  1. 一个字符串
  2. 一系列值
  3. 目前我的代码是:

    propid = ['001', '002', '003', '004'],
    owner = ['bob', 'jim', 'rosie', 'anna'],
    housenumber = ['1', '12', '31', '44'],
    postcode = ['CF10 1AN', 'CF24 4AN', 'CF33 3AA', 'CF10 1AN'],
    price = ['100000', '200000', '300000', '400000']
    
    prop_dict = {propid[i]:[owner[i], housenumber[i], postcode[i], price[i]] for i in range(len(propid))
    

    我想在这本词典中搜索:

    1. 邮政编码:如果邮政编码='CF10 1AN'则打印包含该邮政编码的所有人的整个财产规格,即['001':'bob','1','CF10 1AN','100000'] AND ['004':...]
    2. 我通过执行以下操作来管理:

      def searchPC(values, searchFor):
          for k in values:
              for v in values[k]:
                  if searchFor in v:
                      print(k,":", prop_dict[k])
          return None
      
      1. 价格范围:如果价格范围= 100000到200000,则打印属于该规格的属性,即['001':'bob','1','CF10 1AN','100000']和['002' :....]
      2. 我想将价格从字典列表转换为整数,但显然只是价格部分,然后想要进行类似的搜索,就像我在第1部分中编写但具有最小值和最大值。

        我该怎么做呢?特别是整数部分

        由于

1 个答案:

答案 0 :(得分:0)

在我回答你的问题之前,你的代码中有一些错误:

owner = ['bob', 'jim', 'rosie', 'anna'],

返回一个元组而不是列表,因为尾随,见:

owner = ['bob', 'jim', 'rosie', 'anna'],
print(type(owner))
#prints <class 'tuple'>

您还缺少词典理解中的结束}

你的问题的答案:

propid = ['001', '002', '003', '004']
owner = ['bob', 'jim', 'rosie', 'anna']
housenumber = ['1', '12', '31', '44']
postcode = ['CF10 1AN', 'CF24 4AN', 'CF33 3AA', 'CF10 1AN']
price = ['100000', '200000', '300000', '400000']

prop_dict = {propid[i]:[owner[i], housenumber[i], postcode[i], price[i]] for i in range(len(propid))}

look = 'CF24 4AN' 
price_range = range(50000,150000)

for k,v in prop_dict.items():
    if look in v:
        print('{} has {}'.format(k,v))
    if int(v[3]) in price_range:
        print('{} with {} is in range'.format(k,v))

使用dict.items()在迭代它时从字典中获取密钥和值。

然后比较您要查找的项目是否在值列表中,如果是,则打印它或执行某些操作。

您可以使用range对象查找价格是否在范围内。只需确保在比较之前将价格从字典转换为int。将范围更改为您要查找的范围

注意这个答案适用于Python 3,因为它使用了range()。此外,如果您关心类型错误检查,请使用以下检查范围的方法。或者如果您使用的是旧版本,请使用

low_value = 50000
high_value = 150000
if low_value <= int(v[3]) <= high_value: