Python3 字典一个键对应多个值

[code]
d = {
'a' : [1, 2, 3],
'b' : [4, 5]
}
e = {
'a' : {1, 2, 3},
'b' : {4, 5}
}

如何向上面一样一个键对应多个值呢?

Python
# -*- coding: utf-8 -*- """ @author:songhao @file: c5.py @time: 2017/12/12 """ from <span class="wp_keywordlink_affiliate"><a href="https://www.168seo.cn/tag/collections" title="View all posts in collections" target="_blank">collections</a></span> import <span class="wp_keywordlink_affiliate"><a href="https://www.168seo.cn/tag/defaultdict" title="View all posts in defaultdict" target="_blank">defaultdict</a></span> d = <span class="wp_keywordlink_affiliate"><a href="https://www.168seo.cn/tag/defaultdict" title="View all posts in defaultdict" target="_blank">defaultdict</a></span>(list) d['a'].append(1) d['a'].append(2) d['c'].append(2) print(d) print("*" * 100) d = defaultdict(set) d['a'].add(1) d['a'].add(2) d['b'].add(4) print(d) print("*" * 100) dd = dict() dd['a'] = [1, 2, 3] dd['c'] = [1, 2, 3] print(dd) # output /usr/local/bin/python3 "/Users/songhao/Desktop/Python3 /Python file/d12/c5.py" defaultdict(<class 'list'>, {'a': [1, 2], 'c': [2]}) **************************************************************************************************** defaultdict(<class 'set'>, {'a': {1, 2}, 'b': {4}}) **************************************************************************************************** {'a': [1, 2, 3], 'c': [1, 2, 3]}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# -*- coding: utf-8 -*-
"""
@author:songhao
@file: c5.py
@time: 2017/12/12
"""
 
from collections import defaultdict
 
d = defaultdict ( list )
d [ 'a' ] . append ( 1 )
d [ 'a' ] . append ( 2 )
d [ 'c' ] . append ( 2 )
print ( d )
 
print ( "*" * 100 )
 
d = defaultdict ( set )
d [ 'a' ] . add ( 1 )
d [ 'a' ] . add ( 2 )
d [ 'b' ] . add ( 4 )
 
print ( d )
 
print ( "*" * 100 )
 
dd = dict ( )
dd [ 'a' ] = [ 1 , 2 , 3 ]
dd [ 'c' ] = [ 1 , 2 , 3 ]
 
print ( dd )
 
 
 
# output
 
/ usr / local / bin / python3 "/Users/songhao/Desktop/Python3 /Python file/d12/c5.py"
defaultdict ( < class 'list' > , { 'a' : [ 1 , 2 ] , 'c' : [ 2 ] } )
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
defaultdict ( < class 'set' > , { 'a' : { 1 , 2 } , 'b' : { 4 } } )
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
{ 'a' : [ 1 , 2 , 3 ] , 'c' : [ 1 , 2 , 3 ] }

需要注意的是, defaultdict 会自动为将要访问的键(就算目前字典中并不存在这样的键)创建映射实体。 如果你并不需要这样的特性,你可以在一个普通的字典上使用 setdefault() 方法来代替。比如:

Python
d = {} # A regular dictionary d.setdefault('a', []).append(1) d.setdefault('a', []).append(2) d.setdefault('b', []).append(4) print(d) # {'a': [1, 2], 'b': [4]} # 应用 d = {} for key, value in pairs: if key not in d: d[key] = [] d[key].append(value) # 这种方式 是不是很棒 不用判断键是不是存在 这个字典中 d = defaultdict(list) for key, value in pairs: d[key].append(value)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
d = { } # A regular dictionary
d . setdefault ( 'a' , [ ] ) . append ( 1 )
d . setdefault ( 'a' , [ ] ) . append ( 2 )
d . setdefault ( 'b' , [ ] ) . append ( 4 )
print ( d ) # {'a': [1, 2], 'b': [4]}
 
 
 
# 应用
d = { }
for key , value in pairs :
     if key not in d :
         d [ key ] = [ ]
     d [ key ] . append ( value )
 
# 这种方式 是不是很棒 不用判断键是不是存在 这个字典中
d = defaultdict ( list )
for key , value in pairs :
     d [ key ] . append ( value )



  • zeropython 微信公众号 5868037 QQ号 5868037@qq.com QQ邮箱
Python 中,字典的“一个对应多个”可以通过以下几种方式实现。因为标准的字典(`dict`)中每个只能对应一个,但我们可以通过让这个“”本身是一个**容器**(如列表、元组或集合)来存储多个数据。 --- ### ✅ 方法一:使用列表作为(推荐,可追加) ```python # 创建一个字典一个对应多个(使用列表) d = {} # 添加对应多个 key = &#39;fruits&#39; value = &#39;apple&#39; if key not in d: d[key] = [] # 初始化为空列表 d[key].append(value) d[key].append(&#39;banana&#39;) d[key].append(&#39;cherry&#39;) print(d) # 输出: {&#39;fruits&#39;: [&#39;apple&#39;, &#39;banana&#39;, &#39;cherry&#39;]} ``` 更简洁的方式是使用 `defaultdict`: ```python from collections import defaultdict # 使用 defaultdict(list),自动初始化列表 d = defaultdict(list) d[&#39;fruits&#39;].append(&#39;apple&#39;) d[&#39;fruits&#39;].append(&#39;banana&#39;) d[&#39;vegetables&#39;].append(&#39;carrot&#39;) d[&#39;fruits&#39;].append(&#39;cherry&#39;) print(dict(d)) # 输出: {&#39;fruits&#39;: [&#39;apple&#39;, &#39;banana&#39;, &#39;cherry&#39;], &#39;vegetables&#39;: [&#39;carrot&#39;]} ``` --- ### ✅ 方法二:使用集合(set)避免重复 如果你不希望有重复,并且不在乎顺序: ```python from collections import defaultdict d = defaultdict(set) d[&#39;fruits&#39;].add(&#39;apple&#39;) d[&#39;fruits&#39;].add(&#39;banana&#39;) d[&#39;fruits&#39;].add(&#39;apple&#39;) # 重复,不会添加 print(dict(d)) # 输出: {&#39;fruits&#39;: {&#39;apple&#39;, &#39;banana&#39;}} ``` --- ### ✅ 方法三:使用元组(不可变,适合固定多个) ```python d = {} d[&#39;coordinates&#39;] = (10, 20) d[&#39;colors&#39;] = (&#39;red&#39;, &#39;green&#39;, &#39;blue&#39;) print(d[&#39;colors&#39;]) # 输出: (&#39;red&#39;, &#39;green&#39;, &#39;blue&#39;) ``` 注意:元组一旦创建就不能修改,要更新需要重新赋。 --- ### ✅ 方法四:手动管理列表(不用 defaultdict) ```python d = {} def add_value(d, key, value): if key in d: d[key].append(value) else: d[key] = [value] add_value(d, &#39;subjects&#39;, &#39;math&#39;) add_value(d, &#39;subjects&#39;, &#39;science&#39;) add_value(d, &#39;subjects&#39;, &#39;english&#39;) print(d) # 输出: {&#39;subjects&#39;: [&#39;math&#39;, &#39;science&#39;, &#39;english&#39;]} ``` 等价于使用 `setdefault`: ```python d = {} d.setdefault(&#39;subjects&#39;, []).append(&#39;math&#39;) d.setdefault(&#39;subjects&#39;, []).append(&#39;science&#39;) d.setdefault(&#39;subjects&#39;, []).append(&#39;english&#39;) print(d) # 输出: {&#39;subjects&#39;: [&#39;math&#39;, &#39;science&#39;, &#39;english&#39;]} ``` --- ### 总结对比: | 方法 | 是否可重复 | 是否可变 | 是否自动初始化 | 适用场景 | |------|------------|----------|----------------|----------| | 列表 `list` | 是 | 是 | 否(可用 `defaultdict`) | 一般多存储 | | 集合 `set` | 否 | 是 | 否(可用 `defaultdict(set)`) | 去重 | | 元组 `tuple` | 是 | 否 | 手动 | 固定 | | `setdefault()` | 是 | 是 | 是(一行内) | 简单场景 | --- ### 推荐做法: 对于大多数情况,推荐使用 `defaultdict(list)` 或 `setdefault` 来实现一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值