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

4
我有一个长字符串,逐行从文件中读取。我试图将这些行转换为字典,并尝试检查给定的内容是否存在于字典键值中,如果存在则返回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",则需要打印"Yes"。
  >>> data2
    {'Xyz': ['pqrs', 'uvw']}
  >>>


  >>> if 'pqrs' in (d for d in data2.values()):
  ...  print "yes"
  ...

  >>> if 'pqrs' in data2.values():
  ...     print "yes"
  ...

我尝试了两种方法,但从输出中没有得到任何东西。 任何提示都将是有帮助的。
2个回答

5
您可以使用嵌套字典推导式创建字典:
>>> 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()))

我遇到了无效的语法?>>> d = {key : values.split(",") for key,values in (line.split() for line in data.splitlines()) } File "<stdin>", line 1 d = {key : values.split(",") for key,values in (line.split() for line in data.splitlines()) } ^ SyntaxError: 无效的语法 - Prasanna Ranganthan
你使用的是哪个版本的Python?Dict-Comprehensions在Python 2.7或者更高版本中才有(也就是不算新了)。或者,你可以尝试使用dict((key, values.split(",")) for ... ) - tobias_k
我正在使用Python 2.6。谢谢,我明白了。 - Prasanna Ranganthan

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接