给出这样的字典:
my_map = {'a': 1, 'b': 2}
Run Code Online (Sandbox Code Playgroud)
如何反转此地图以获得:
inv_map = {1: 'a', 2: 'b'}
Run Code Online (Sandbox Code Playgroud)
编者注: __CODE__改为__CODE__避免与内置函数冲突,__CODE__.下面有些评论可能会受到影响.
使用UserDict类有什么好处?
我的意思是,如果不是,我真的得到了什么
class MyClass(object):
def __init__(self):
self.a = 0
self.b = 0
...
m = MyClass()
m.a = 5
m.b = 7
Run Code Online (Sandbox Code Playgroud)
我会写以下内容:
class MyClass(UserDict):
def __init__(self):
UserDict.__init__(self)
self["a"] = 0
self["b"] = 0
...
m = MyClass()
m["a"] = 5
m["b"] = 7
Run Code Online (Sandbox Code Playgroud)
编辑:如果我理解正确,我可以在两种情况下都在运行时向对象添加新字段?
m.c = "Cool"
Run Code Online (Sandbox Code Playgroud)
和
m["c"] = "Cool"
Run Code Online (Sandbox Code Playgroud) 我想以类似的形式将一些数据存储在Python中:{1:'a', 2:'b'}.每个值都是唯一的,不仅仅是其他值,还包括键.
是否有一个简单的数据结构,我可以使用它来获取相应的对象,无论我是否要求使用'key'或'value'?例如:
>>> a = {1:'a', 2:'b'}
>>> a[1]
'a'
>>> a['b']
2
>>> a[3]
KeyError
Run Code Online (Sandbox Code Playgroud)
'keys'是标准的python int,值是短(<256char)字符串.
我目前的解决方案是创建一个反向字典并搜索它,如果我在原始字典中找不到结果:
pointsreversed = dict((v, k) for k, v in points.iteritems())
def lookup(key):
return points.get(key) or pointsreversed.key()
Run Code Online (Sandbox Code Playgroud)
这使用了两倍的空间,这不是很好(我的词典可以达到几百兆),平均减慢50%.
编辑:正如在几个答案中提到的,两个dicts不会使内存使用量增加一倍,因为它只是字典,而不是内部的项目,即重复.
有没有改进的解决方案?
我有一个对象字典:
dic = {'k1':obj1, 'k2':obj2, 'k3':obj3, ...}
class MyObject:
def __init__(self,x,y):
self.x=x
self.y=y
Run Code Online (Sandbox Code Playgroud)
我想知道如何找到与值对应的键的最佳实现。相当于:
def find_key(dic, val):
for k,v in dic.items():
if v==val:
return k
return None
Run Code Online (Sandbox Code Playgroud)
注意:抱歉,如果这是显而易见的,我是 Python 新手:-)