如何从值使用正则表达式的python dict中获取(键,值)

时间:2018-04-04 06:36:42

标签: python regex

如何使用dict中的正则表达式从字典中提取键和值。 例如:

my_dict = {'Name':'John' , 'Address':'foo-street', 'Milk':'1$' , 'Bread': '2$' , 'Delivery':'No' , 'Sauce':'5$' }

#I have to get key & values for values that contain $ and create two lists 
my_goods = ['Milk','Bread','Sauce']
my_price = ['$1','$2','$5']

#The regex using filter gets me the values in a list but not the keys.

    r = re.compile("\$")
    my_price = filter(r.match,my_dict.values())

如何获取相关的键和值?

2 个答案:

答案 0 :(得分:3)

您不需要正则表达式。只需迭代字典,然后检查“$”是否值。

<强>实施例

my_dict = {'Name':'John' , 'Address':'foo-street', 'Milk':'1$' , 'Bread': '2$' , 'Delivery':'No' , 'Sauce':'5$' }

my_goods = []
my_price = []

for k,v in my_dict.items():
    if "$" in v:
        my_price.append(v)
        my_goods.append(k)

print(my_goods, my_price)

根据评论进行修改。

import re

n = re.compile("^0x[A-Z]+")
my_dict = {'Name':'0xFFAA' , 'Address':'0xAABB', 'Milk':'1$' , 'Bread': '2$' , 'Delivery':'No' , 'Sauce':'5$' }

my_goods = []
my_price = []

for k,v in my_dict.items():
    if n.match(v):
        my_price.append(v)
        my_goods.append(k)

print(my_goods, my_price)

答案 1 :(得分:0)

这听起来像是一个XY问题。或者换句话说,您询问的是复杂的尝试解决方案,而不是正确解决您的实际问题。

首先,为具有价格的商品过滤(键,值)对。

>>> goods = [(good, price) for good, price in my_dict.items() if price.endswith('$')]
>>> goods
[('Sauce', '5$'), ('Milk', '1$'), ('Bread', '2$')]

然后使用内置的zip转换此列表:

>>> my_goods, my_price = zip(*goods)
>>> my_goods
('Sauce', 'Milk', 'Bread')
>>> my_price
('5$', '1$', '2$')

如果真的有必要,可以将结果元组转换为list可调用的列表。