【问题标题】:finding if part of a word is in values of a python dictionary查找单词的一部分是否在 python 字典的值中
【发布时间】:2012-04-30 04:27:58
【问题描述】:

解析一个包含人名和年龄的json文件后,

{"People":
    [
        {  "name":"damon julian",
           "age":40
         }
    ]
}

data=json.load(file)
d1=data["People"][0]

我有一本这样的字典

d1={'name':'damon julian','age':40}

我想知道子字符串'damon'是否存在于dict中的某个值中。所以我尝试了

[(k, v) for (k, v) in d1.iteritems() if 'damon' in v]

但是这样会报错

TypeError: argument of type 'int' is not iterable

我通过将值转换为字符串解决了这个问题

[(k, v) for (k, v) in d1.iteritems() if 'damon' in str(v)]

我想知道是否有更好的方法来做到这一点。我转换json data to dict然后解析值的方法是否正确?或者有更好的方法——可能是使用正则表达式或其他什么?

请指教。

【问题讨论】:

  • 您是否真的需要查看字典的所有条目,还是name 值就足够了?
  • 我很困惑。您是要定位并返回包含您的姓名的字段,还是只返回 True(如果存在)?
  • 条件匹配需要返回字段
  • 这并不是真正的“转换”(Python 没有这种东西),而是“转换”。无论如何,如果您只需要检查名称字段,那么为什么不只检查名称字段

标签: python json


【解决方案1】:
any(('damon' in v) for v in yourDict.values() if isinstance(v,str))

any((isinstance(v,str) and 'damon' in v) for v in yourDict.values())

(请注意,这两种结构并不总是等价的)

【讨论】:

  • 这会抛出异常,就像他的第一次尝试一样。
  • @agf:啊,我明白了。谢谢你。固定
  • isinstance是过滤条件,所以放在生成器表达式的if子句中。
  • 过滤条件在any()all() 中的工作方式略有不同;这不应该是一个过滤条件。
  • 虽然在这种特殊情况下,我相信它可以用作过滤条件(为了便于阅读,我可能会更改它),因为忽略 any(...) 中的值相当于假装它是 False。跨度>
猜你喜欢
  • 1970-01-01
  • 2014-09-16
  • 2017-06-12
  • 1970-01-01
  • 2018-05-17
  • 2019-12-29
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多