Skip to main content
 首页 » 编程设计

Python 字典或替代品

2025年05月04日12txw1958

例如,

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']}