例如,
if dict['sample']:
//append values to dict['sample']
else:
// assign new key to the python dictionary
如果 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
请您参考如下方法:
“if key in 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
defaultdict 负责为您检查 key 是否存在,您的代码所要做的就是 1) 为 defaultdict 定义一个工厂函数或类以用于初始化新的 key 条目(在本例中,defaultdict (list)),以及 2) 定义如何处理每个键 (dd[c].append(c))。干净、简单、没有杂乱。
在您的特定示例中,您实际上可以使用 itertools.groupby,因为字母组对于每个分组值都是连续的。 groupby 返回元组的迭代器,每个元组包含当前键值和匹配值的迭代器。以下代码将每个元组的值列表迭代器转换为实际列表(在 list(v) 中),并将键值列表元组序列传递给字典构造函数。
from itertools import groupby
print dict((k,list(v)) for k,v in groupby(data))
打印:
{'a': ['a', 'a'], 'c': ['c'], 'b': ['b'], 'g': ['g', 'g', 'g', 'g', 'g']}
