繁体   English   中英

将字典值作为元组或字符串列表返回

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM