[英]Return dictionary value as tuple or list from a string
我有一个很长的字符串,我正在逐行读取文件。我正在尝试将行转换为字典并尝试检查给定的字典键值是否存在,它必须返回true。
例:
>>> data
'Xyz pqrs,uvw'
>>> dict(line.split(',') for line in data.strip().splitlines())
{'Xyz pqrs': 'uvw'}
这是我得到的输出
预期结果:
在元组中
{'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"
...
我尝试了两种方式,但没有从输出中得到任何东西。
任何提示都会有所帮助。
您可以使用嵌套字典理解来创建字典:
>>> 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()))
你必须澄清你的规则。 但是从你向我们展示的这个正则表达式应该做的工作
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.