当前位置:  开发笔记 > 编程语言 > 正文

Python中的字典

如何解决《Python中的字典》经验,为你挑选了2个好方法。

我正在努力加速使用词典.昨晚我花了三个小时在网上搜索类似于我想要做的一些事情的例子.例如,假设我有两个词典(实际上我有两个词典列表).

d1={key1:1, key2:2}
d2={key1:1, key2:'A', key4:4}

我想更新d1所以它看起来如下所示:

d1={key1:1, key2:[2,'A'], key3:3, key4:4}

我似乎找不到足够的例子让我开始.我有相当数量的书籍,我也审查了它们,但它们似乎都有我在网上找到的相同类型的例子.

有没有人知道一个地方或一本书有明确的例子和如何使用字典的描述?

我认为我遇到的一个问题是我不理解在访问字典时如何维护引用.

我可以查看两个词典是否有共同的密钥:

for k in d1.keys():
    for k2 in d2.keys():
        if k==k2:
            print 'true'

但如果他们这样做我似乎无法将值组合成一个列表.

不仅仅是对这个特定例子的直接回答,我将非常感谢有关使用词典的好例子的地方的任何建议.



1> S.Lott..:

试试这个:

import collections
merged = collections.defaultdict(list)
for k in d1:
   merged[k].append( d1[k] )
for k in d2:
   merged[k].append( d2[k] )

这可能是你正在寻找的.

或者可能这样.

import collections
merged = collections.defaultdict(set)
for k in d1:
   merged[k].add( d1[k] )
for k in d2:
   merged[k].add( d2[k] )



2> David Woleve..:

一个好的开始是获取iPython(easy_install ipython)然后选择Tab完成,?并且dir:

In [2]: dir {}
------> dir({})

Out[2]: 
['__class__',
 ...
 'keys',
 'pop',
 'popitem',
 'setdefault',
 'update',
 'values']

In [3]: {}.update?
Type:       dict
Base Class: 
String Form:    {}
Namespace:  Interactive
Length:     0
Docstring:
    dict() -> new empty dictionary.
    dict(mapping) -> new dictionary initialized from a mapping object's
        (key, value) pairs.
    dict(seq) -> new dictionary initialized as if via:
        d = {}
        for k, v in seq:
            d[k] = v
    dict(**kwargs) -> new dictionary initialized with the name=value pairs
        in the keyword argument list.  For example:  dict(one=1, two=2)

(仅举例)

无论如何,你检查两个字典之间常见的问题是有问题的:有几件事需要考虑(可能看看这个set类?),但这是我怎么做的:

common_keys = [k for k in dict1 if k in dict2]

(即" kdict1中的每个键,如果该键也在dict2中")(另请注意,对字典成员资格的测试是O(1)操作,因此这将在O(| dict1 |)中运行)

编辑:好的,所以这并没有解决将两个dicts合并为一个列表的问题......但是Lott的答案对此有好处,或者你可以使用这个setdefault方法:

new = {}
for (k, v) in dict1.items():
    new.setdefault(k, []).append(v)
for (k, v) in dict2.items():
    new.setdefault(k, []).append(v)


如果您更喜欢阅读文档,编写一些代码然后希望它可以工作 - 很棒.但是,当我学习一门新语言时,我更喜欢在实时对象上闲逛,尝试一下,实时查看结果.如果你不认为这种经历是有价值的,那么......对不起.
推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有