Python字典或替代

MrC*_*ooL 1 python dictionary

例如,

if dict['sample']:
    //append values to dict['sample']
else:
    // assign new key to the python dictionary
Run Code Online (Sandbox Code Playgroud)

如果dict ['sample']为空,Python将抛出错误.有谁知道更好的方法来检查这个?

我想要的就是这样,我会有数据列表,比方说a,a,b,c,g,g,g,g,g.

所以,我希望python字典将两个a,a的值附加到dict ['a'],并将g,g,g,g,g附加到dict ['g'],其余的作为dict ['b'执行for循环以循环a,a,b,c,g,g,g,g,g的数据.

我希望我的问题清楚.任何的想法?最好是,如果Python的字典有办法检查现有密钥.

编辑

归功于@Paul McGuire.根据@Paul McGuire的回答,我已经找到了我想要的确切解决方案.如下所示:

from collections import defaultdict

class Test:
   def __init__(self, a,b):
       self.a=a
       self.b=b

data = []
data.append(Test(a=4,b=6))
data.append(Test(a=1,b=2))
data.append(Test(a=1,b=3))
data.append(Test(a=2,b=2))
data.append(Test(a=3,b=2))
data.append(Test(a=4,b=5))
data.append(Test(a=4,b=2))
data.append(Test(a=1,b=2))
data.append(Test(a=5,b=9))
data.append(Test(a=4,b=7))

dd = defaultdict(list)
for c in data:
    dd[c.a].append(c.b)
print dd
Run Code Online (Sandbox Code Playgroud)

Pau*_*McG 13

"如果键入dict"或"dict.get"或"dict.setdefault"的旧方法都应该被搁置以支持现在的标准defaultdict:

data = "aabcggggg"

from collections import defaultdict
dd = defaultdict(list)
for c in data:
    dd[c].append(c)
print dd
Run Code Online (Sandbox Code Playgroud)

defaultdict负责检查密钥是否存在,您的所有代码必须做的是1)为defaultdict定义工厂函数或类以用于初始化新的密钥条目(在本例中defaultdict(list)),以及2)定义什么与每个键(dd[c].append(c)).干净,简单,没有杂乱.

在您的特定示例中,您实际上可以使用itertools.groupby,因为字母组对于每个分组值都是连续的. groupby返回元组的迭代器,每个元组包含当前键值和匹配值的迭代器.下面的代码通过将每个元组的values-of-values-iterator转换为实际列表(in list(v)),并将key-valuelist元组序列传递给dict构造函数来工作.

from itertools import groupby
print dict((k,list(v)) for k,v in groupby(data))
Run Code Online (Sandbox Code Playgroud)

打印:

{'a': ['a', 'a'], 'c': ['c'], 'b': ['b'], 'g': ['g', 'g', 'g', 'g', 'g']}
Run Code Online (Sandbox Code Playgroud)


yed*_*tko 5

my_dict = {}
my_dict.setdefault('sample', []).append(value)
Run Code Online (Sandbox Code Playgroud)

'setdefault'方法的第二个参数表示如果给定的键不存在,应该是什么初始值