从字符串中以元组或列表形式返回字典值

Pra*_*han 4 python dictionary

我有一个很长的字符串,我正在从文件中逐行读取它。我试图将这些行转换为字典,并尝试检查给定的值是否存在于字典键值中,它必须返回 true。

例子:

>>> data
'Xyz         pqrs,uvw'
>>> dict(line.split(',') for line in data.strip().splitlines())
{'Xyz         pqrs': 'uvw'}
Run Code Online (Sandbox Code Playgroud)

这是我得到的输出

预期结果:

在元组中

 {'Xyz' : ('pqrs','uvw')}
Run Code Online (Sandbox Code Playgroud)

或列出

{'Xyz' : ['pqrs','uvw']}
Run Code Online (Sandbox Code Playgroud)

如果 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"
  ...
Run Code Online (Sandbox Code Playgroud)

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

任何提示都会有帮助。

tob*_*s_k 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']}
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令检查遏制any

>>> any("pqrs" in v for v in d.values())
True
Run Code Online (Sandbox Code Playgroud)

更新:由于您似乎使用的是 Python 2.6,因此在dict-compressives存在之前,您必须使用以下等效形式:

>>> d = dict((key, values.split(",")) for key, values in 
             (line.split() for line in data.splitlines()))
Run Code Online (Sandbox Code Playgroud)