在Python中,我需要一个字典对象,如下所示:
{'a': 10, 'b': 20, 'c': 10, 'd': 10, 'e': 20}
Run Code Online (Sandbox Code Playgroud)
我已经能够通过组合dict.update()和如下dict.fromkeys()功能成功地获得这个:
myDict = {}
myDict.update(dict.fromkeys(['a', 'b', 'c'], 10))
myDict.update(dict.fromkeys(['b', 'e'], 20))
Run Code Online (Sandbox Code Playgroud)
但是,因为代码是为有时需要添加键/值的新手用户编写的,所以我更喜欢简单的简单(Perl-like)语法,例如:
myDict = {}
myDict['a', 'c', 'd'] = 10
myDict['b', 'e'] = 20
Run Code Online (Sandbox Code Playgroud)
然而,这给了我:
myDict = {('a', 'c', 'd'): 10, ('b', 'e'): 20}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以进一步简化我的第一个例子(使用dict.update()和dict.fromkeys()),并获取我正在寻找的dict对象?
或者,或者,如果我在第二个例子中有一个带有元组的字典,那么我是否可以轻松地进行查找,例如myDict['c']或myDict.get('c')获取值10?
是否可以在Python字典中为每个值分配多个键.一种可能的解决方案是为每个键分配值:
dict = {'k1':'v1', 'k2':'v1', 'k3':'v1', 'k4':'v2'}
Run Code Online (Sandbox Code Playgroud)
但这不是内存效率,因为我的数据文件大于2 GB.否则你可以制作字典键的字典:
key_dic = {'k1':'k1', 'k2':'k1', 'k3':'k1', 'k4':'k4'}
dict = {'k1':'v1', 'k4':'v2'}
main_key = key_dict['k2']
value = dict[main_key]
Run Code Online (Sandbox Code Playgroud)
这也是非常耗费时间和精力的,因为我必须经历两次整个字典/文件.还有其他简单和内置的Python解决方案吗?
注意:我的字典值不是简单的字符串(如问题'v1','v2')而是相当复杂的对象(包含不同的其他字典/列表等等,并且不可能腌制它们)
注意:问题看起来类似如何我同时使用键和索引作为相同的字典值?
但我不是在寻找有序/索引字典,我正在寻找其他有效的解决方案(如果有的话),除了这个问题中提到的两个.
可能重复:
如何将具有多个键的字典创建为一个值?
我有5列数据,
usermac, useragent, area ,videoid, number of requests
Run Code Online (Sandbox Code Playgroud)
我想使用(usermac,useragent)作为创建字典的关键字,因为(usermac,useragent)的唯一组合代表一个唯一的用户.
所以字典就像:
usermac1, useragent1: area1, videoid1, 10
area1, videoid2, 29
usermac1, useragent2: area1, videoid1, 90
area1, videoid2, 34
...
Run Code Online (Sandbox Code Playgroud)
我只知道如何创建只有一个项目作为键的字典.有人可以帮忙吗?
我的代码是:
for line in fd_in.readlines():
(mac, useragent, area, videoid, reqs) = line.split()
video_dict = d1.setdefault((mac,useragent) {})
video_dict.setdefault(videoid, []).append(float(reqs))
Run Code Online (Sandbox Code Playgroud)
它有语法错误:
video_dict = d1.setdefault((mac,useragent) {})
Run Code Online (Sandbox Code Playgroud) 我想制作一个每个值有多个键的二维字典.我不想把元组作为一把钥匙.而是使许多键返回相同的值.
我知道如何使用defaultdict创建一个二维字典:
from collections import defaultdict
a_dict = defaultdict(dict)
a_dict['canned_food']['spam'] = 'delicious'
Run Code Online (Sandbox Code Playgroud)
我可以使用一个元组作为一个元组
a_dict['food','canned_food']['spam'] = 'delicious'
Run Code Online (Sandbox Code Playgroud)
但这不允许我做类似的事情
print a_dict['canned_food]['spam']
Run Code Online (Sandbox Code Playgroud)
因为'canned_food'不是关键,元组['food','canned_food']是关键.
我了解到我可以简单地将多个设置为相同的值,如:
a_dict['food']['spam'] = 'delicious'
a_dict['canned_food']['spam'] = 'delicious'
Run Code Online (Sandbox Code Playgroud)
但是这会因为大量按键而变得混乱.在字典的第一维中,每个值需要~25个键.有没有办法写字典,以便元组中的任何键都可以工作?
我以前曾问过这个问题, 但不清楚我想要什么,所以我要重新发布.预先感谢您的任何帮助.
可以创建这样的数据结构吗?
w = {'London', 'Glasgow', 'Dublin' : 'rainy' , 'Paris', 'Berlin': 'cloudy', 'Tokyo', 'Montevideo' : 'sunny' }
Run Code Online (Sandbox Code Playgroud)
(当然上面有无效的语法)
我想避免写:
w = {'London' : 'rainy' , 'Glasgow' : 'rainy', 'Dublin' : 'rainy' , 'Paris' : 'cloudy' , 'Berlin': 'cloudy', 'Tokyo' : 'sunny' , 'Montevideo' : 'sunny' }
Run Code Online (Sandbox Code Playgroud)
有没有办法缩短它,然后轻松访问每个值的值?