【问题标题】:Retrieve a key-value pair from a dict as another dict从一个字典中检索一个键值对作为另一个字典
【发布时间】:2014-11-10 21:26:54
【问题描述】:

我有一本看起来像这样的字典:

{u'message': u'Approved', u'reference': u'A71E7A739E24', u'success': True}

我想检索键值对以供参考,即{ 'reference' : 'A71E7A739E24' }。 我正在尝试使用iteritems 来执行此操作,它确实返回k, v 对,然后我将它们添加到新字典中。但是,由于某种原因,结果值是unicode 而不是str,我不确定这是否是最直接的方法:

ref = {}
for k, v in charge.iteritems():
    if k == 'reference':
        ref['reference'] = v
        print ref

{'reference': u'A71E7A739E24'}

有没有一种更容易做到这一点的内置方法?或者,至少,避免使用iteritems 并简单地返回:

{ 'reference' : 'A71E7A739E24' }

【问题讨论】:

  • 在你的代码中使用dd[k] = v
  • 听说过使用哈希表的主要方法(在​​您的情况下)charge['reference']
  • @ivan_pozdeev,是的,但我试图将引用键及其值作为字典返回。这只是获取密钥,这就是为什么我要问 iteritems 是最好的方法吗?
  • 好的...那么这是一个有效的问题!

标签: python dictionary unicode


【解决方案1】:

使用 iteritems 的问题在于,您将查找时间增加到 O(n),其中 n 是字典大小,因为您不再使用哈希表

【讨论】:

    【解决方案2】:

    如果只需要得到一个键值对,那么简单

    ref = { key: d[key] }
    

    如果可能有多个对被某个条件选中,

    使用可迭代构造函数中的dict(如果您的条件也取决于值,则第二个版本会更好):

    ref = dict(k,d[k] for k in charge if <condition>)
    ref = dict(k,v for k,v in charge.iteritems() if <condition>)
    

    或(从 2.7 开始)dict comprehension(上面的语法糖):

    ref = {k,d[k] for k in charge if <condition>}
    <same as above>
    

    【讨论】:

    • 谢谢,这实现了我想要做的并且非常清楚!
    • 顺便说一句,您的值是 unicode 而不是 str 因为它在原始字典中也是 unicode
    • 这是有道理的,事实证明,对于我正在做的事情,它保持在 unicode 中并不重要。再次感谢伊万。
    【解决方案3】:

    我不明白这个问题:
    这是你想要做的:
    ref={'reference',charge["reference"]}

    【讨论】:

    • 我修正了几个错别字。基本上只是试图从那个更大的字典中返回 { 'reference' : 'A71E7A739E24' } ,但是有可能。似乎我没有通过使用 iteritems 以最直接的方式做到这一点。
    • 啊,我明白了,这确实做了我想做的事,但一开始并不能真正理解。谢谢。
    猜你喜欢
    • 2017-07-29
    • 1970-01-01
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多