相关疑难解决方法(0)

是否可以同时为dict对象中的多个键分配相同的值?

在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 syntax dictionary

44
推荐指数
5
解决办法
6万
查看次数

每个值有多个键

是否可以在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')而是相当复杂的对象(包含不同的其他字典/列表等等,并且不可能腌制它们)

注意:问题看起来类似如何我同时使用键和索引作为相同的字典值? 但我不是在寻找有序/索引字典,我正在寻找其他有效的解决方案(如果有的话),除了这个问题中提到的两个.

python python-2.7 python-3.x

35
推荐指数
2
解决办法
4万
查看次数

使用两个项作为键来创建字典python

可能重复:
如何将具有多个键的字典创建为一个值?

我有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)

python

16
推荐指数
2
解决办法
4万
查看次数

带有许多键的2d字典将返回相同的值

我想制作一个每个值有多个键的二维字典.我不想把元组作为一把钥匙.而是使许多键返回相同的值.

我知道如何使用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个键.有没有办法写字典,以便元组中的任何键都可以工作?

我以前曾问过这个问题, 但不清楚我想要什么,所以我要重新发布.预先感谢您的任何帮助.

python dictionary python-2.x

2
推荐指数
1
解决办法
2722
查看次数

python可以一次为不同的键分配相同的值吗?

可以创建这样的数据结构吗?

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)

有没有办法缩短它,然后轻松访问每个值的值?

python dictionary

2
推荐指数
1
解决办法
62
查看次数

标签 统计

python ×5

dictionary ×3

python-2.7 ×1

python-2.x ×1

python-3.x ×1

syntax ×1