如何使用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())
如何获取相关的键和值?
答案 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
可调用的列表。