【问题标题】:Return dictionary value as tuple or list from a string从字符串返回字典值作为元组或列表
【发布时间】:2016-07-05 20:02:22
【问题描述】:

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

示例:

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

这是我得到的输出

预期结果:

在元组中

 {'Xyz' : ('pqrs','uvw')}

或列表

{'Xyz' : ['pqrs','uvw']}

如果“pqrs”出现在 data.values() 中,它必须打印“是”

  >>> data2
    {'Xyz': ['pqrs', 'uvw']}
  >>>


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

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

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

任何提示都会有所帮助。

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    您可以使用嵌套字典理解创建字典:

    >>> 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 "", line 1 d = {key : values.split(",") for key,values in (line.split() for line in data.splitlines()) } ^ SyntaxError: invalid syntax
    • 您使用的是什么版本的 Python? Dict-Comprehensions 在 Python 2.7 左右是新的(即,不是什么新东西)。或者,试试dict((key, values.split(",")) for ... )
    • 我使用的是 python 2.6。谢谢我明白了
    【解决方案2】:

    你必须澄清你的规则。但是从您向我们展示的内容来看,这个正则表达式应该可以完成这项工作

    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
    

    【讨论】:

      猜你喜欢
      • 2019-12-17
      • 1970-01-01
      • 2021-01-29
      • 2017-03-27
      • 1970-01-01
      • 1970-01-01
      • 2012-05-21
      • 2018-10-06
      • 1970-01-01
      相关资源
      最近更新 更多