例如,
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)
my_dict = {}
my_dict.setdefault('sample', []).append(value)
Run Code Online (Sandbox Code Playgroud)
'setdefault'方法的第二个参数表示如果给定的键不存在,应该是什么初始值