【问题标题】:Searching a dictionary of lists with a certain string and range of values python搜索具有特定字符串和值范围的列表字典python
【发布时间】:2017-03-24 15:46:54
【问题描述】:

我想通过指定搜索字典

  1. 一个字符串
  2. 数值范围

目前我的代码是:

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': ...]

我通过以下方式进行管理:

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' : ....]

我想将字典列表中的价格转换为整数,但显然只有价格部分,然后想要进行与我在第 1 部分中组合但具有最小值和最大值的类似搜索。

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

谢谢

【问题讨论】:

  • 你试过什么,StackOverflow 不是编码服务。
  • 用进度更新了我的 Q

标签: python dictionary search


【解决方案1】:

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

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:

【讨论】:

    猜你喜欢
    • 2018-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-01-01
    • 1970-01-01
    • 2017-04-21
    • 1970-01-01
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多