我有一个长字符串,我正在逐行读取文件。我正在尝试将行转换为字典并尝试检查给定是否存在于字典键值中,它必须返回true。
示例:
>>> data
'Xyz pqrs,uvw'
>>> dict(line.split(',') for line in data.strip().splitlines())
{'Xyz pqrs': 'uvw'}
这是我得到的输出
预期结果:
in元组
{'Xyz' : ('pqrs','uvw')}
或列表
{'Xyz' : ['pqrs','uvw']}
如果data.values()中存在'pqrs',则必须打印“是”
>>> data2
{'Xyz': ['pqrs', 'uvw']}
>>>
>>> if 'pqrs' in (d for d in data2.values()):
... print "yes"
...
>>> if 'pqrs' in data2.values():
... print "yes"
...
我尝试了两种方法,但没有从输出中得到任何东西。
任何提示都会有所帮助。
答案 0 :(得分:4)
您可以使用嵌套字典理解创建字典:
>>> data = """Xyz pqrs,uvw
... Abc foo,bar,blub"""
>>> d = {key: values.split(",") for key, values in
(line.split() for line in data.splitlines())}
>>> d
{'Xyz': ['pqrs', 'uvw'], 'Abc': ['foo', 'bar', 'blub']}
然后使用any
检查遏制:
>>> any("pqrs" in v for v in d.values())
True
更新:由于您似乎在使用Python 2.6,在dict-comprehensions存在之前,您必须使用此等效形式:
>>> d = dict((key, values.split(",")) for key, values in
(line.split() for line in data.splitlines()))
答案 1 :(得分:0)
你必须澄清你的规则。但是根据你向我们展示的这个正则表达式应该做的工作
import re
pattern = re.compile(r'[\s,]*')
result = {}
for line in data.strip().splitlines():
parts = pattern.split(line)
key = parts[0]
values = parts[1:]
if 'pqrs' in values:
print 'yes'
result[key] = values