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

时间:2016-07-05 20:02:23

标签: python dictionary

我有一个长字符串,我正在逐行读取文件。我正在尝试将行转换为字典并尝试检查给定是否存在于字典键值中,它必须返回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"
  ...

我尝试了两种方法,但没有从输出中得到任何东西。

任何提示都会有所帮助。

2 个答案:

答案 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