我创建了一个函数,它将在a中查找年龄Dictionary
并显示匹配的名称:
dictionary = {'george' : 16, 'amber' : 19}
search_age = raw_input("Provide age")
for age in dictionary.values():
if age == search_age:
name = dictionary[age]
print name
Run Code Online (Sandbox Code Playgroud)
我知道如何比较和找到我只是不知道如何显示这个人的名字的年龄.另外,KeyError
由于第5行,我得到了一个.我知道这不正确,但我无法弄清楚如何让它向后搜索.
字典在Python 3.6中排序(至少在CPython实现下),与之前的版本不同.这似乎是一个重大变化,但它只是文档中的一小段.它被描述为CPython实现细节而不是语言特性,但也暗示这可能成为未来的标准.
在保留元素顺序的同时,新字典实现如何比旧字典实现更好?
以下是文档中的文字:
dict()
现在使用PyPy开创的"紧凑"表示.与Python 3.5相比,新dict()的内存使用量减少了20%到25%.PEP 468(在函数中保留**kwargs的顺序.)由此实现.这个新实现的顺序保留方面被认为是一个实现细节,不应该依赖(这可能会在未来发生变化,但是在更改语言规范之前,希望在几种版本的语言中使用这个新的dict实现为所有当前和未来的Python实现强制命令保留语义;这也有助于保持与随机迭代顺序仍然有效的语言的旧版本的向后兼容性,例如Python 3.5).(由INADA Naoki在issue 27350中提供.最初由Raymond Hettinger提出的想法.)
2017年12月更新:Python 3.7 保证了dict
保留插入顺序
通过了解字典中的值,有没有直接找到密钥的方法?
我能想到的就是:
key = [key for key, value in dict_obj.items() if value == 'value'][0]
Run Code Online (Sandbox Code Playgroud) 我收到一个字典作为输入,并希望返回一个字典,其键将是输入的值,其值将是相应的输入键.价值观是独一无二
例如,说我的输入是:
a = dict()
a['one']=1
a['two']=2
Run Code Online (Sandbox Code Playgroud)
我希望我的输出是:
{1: 'one', 2: 'two'}
Run Code Online (Sandbox Code Playgroud)
为了澄清我希望我的结果等同于以下内容:
res = dict()
res[1] = 'one'
res[2] = 'two'
Run Code Online (Sandbox Code Playgroud)
任何巧妙的Pythonian方式来实现这一目标?
谢谢
说我有这样的字典:
my_dict = {2:3, 5:6, 8:9}
Run Code Online (Sandbox Code Playgroud)
有没有办法可以切换键和值来获得:
{3:2, 6:5, 9:8}
Run Code Online (Sandbox Code Playgroud) 我有一个问题,需要一个可逆的1:1键到值的映射.
这意味着有时我想找到一个给定键的值,但有时我想找到给定值的键.键和值都保证唯一.
x = D[y]
y == D.inverse[x]
Run Code Online (Sandbox Code Playgroud)
显而易见的解决方案是每次我想要反向查找时简单地反转字典:反转字典非常容易,这里有一个配方但是对于大字典它可能非常慢.
另一种方法是创建一个新的类,它将两个字典统一起来,每个字典对应一种查找.这很可能很快,但会消耗两倍于单个字典的内存.
那么我可以使用更好的结构吗?
可能重复:
反向字典查找 - 使用Python 进行字典的Python
反向映射
如何在字典中获取索引的键?
例如:
i = {'a': 0, 'b': 1, 'c': 2}
Run Code Online (Sandbox Code Playgroud)
所以,如果我想获得i [0]的关键,它将返回'a'
我有两个3GB的文本文件,每个文件有大约8000万行.它们共享99.9%的相同行(文件A有60,000个唯一行,文件B有80,000个唯一行).
如何在两个文件中快速找到这些独特的行?是否有任何现成的命令行工具?我正在使用Python,但我认为找到一个有效的Pythonic方法加载文件并进行比较的可能性较小.
任何建议表示赞赏.
我想以类似的形式将一些数据存储在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不会使内存使用量增加一倍,因为它只是字典,而不是内部的项目,即重复.
有没有改进的解决方案?
这实际上是这个问题的变体,但不是重复的:
给出这样的字典:
mydict= { 'a': ['b', 'c'], 'd': ['e', 'f'] }
怎么能反转这个字典得到:
inv_mydict = { 'b':'a', 'c':'a', 'e':'d', 'f':'d' }
请注意,值在每个键下唯一地跨越.
注意:我以前有语法map = ...
和dict = ...
提醒不使用map
,dict
因为它们是内置函数,请参阅下面的优秀评论和答案:)
python ×10
dictionary ×8
compare ×1
diff ×1
file ×1
hashtable ×1
inverse ×1
key ×1
mapping ×1
python-3.6 ×1
python-3.x ×1
text ×1