【发布时间】:2018-06-02 22:58:26
【问题描述】:
编辑: 根据要求,这是我要解决的问题: 我在没有扩展名的目录中有文件。根据“文件”命令的输出,我想分配相应的扩展名。所以我的字典将可以在此输出中的字符串分配给扩展名(例如“ASCII”:“txt”),但不知道它是否是确切的输出。例如:
$ file my_file
myfile: ASCII text
# I want to change the extension of myfile to myfile.txt
这就是我编写的代码的目的,但也许有更好的解决方案
我有一个字符串字典,其中的键具有通用字符串:
MY_D = {
"first_k": "first_v",
"sec_k": "sec_v",
"some_key_name_that_includes_others": "value1",
"some_other_key": "value2",
...
"last_k": "last_v"
}
有时,如果搜索词在键中,我必须获取一个值。我使用此代码:
key_I_am_looking_for = "some"
value = list(v for k, v in MY_D.items() if value_I_am_looking_for in k)[-1]
但是当我要找的键出现在多个可能的键中时,我得到的值并不总是相同的,在这个例子中它可以是“value1”或“value2”。 我注意到返回的列表并不总是以相同的方式排序。
有没有一种方法可以让这个返回总是与匹配的最长键对应的值(这里是“value1”)?
【问题讨论】:
-
dict在设计上是无序的,因此当调用MY_D.items()时,无法保证您会按照插入它们的顺序获得这些项目。如果你想保留插入顺序,你应该考虑使用OrderedDict -
这对我来说像是一个XY problem 的问题。您所描述的内容还取决于 dict 的创建方式以及您使用的 Python 版本,因此我怀疑您是否会得到对这个问题有帮助的答案。您能否更新您的答案,描述您需要解决的实际问题?
-
或者更新到python 3.6,这是有序的,现在字典保证将来保持插入顺序。
-
@MatiasCicero - 这不太正确。从 Python 3.6 开始,插入顺序保留在 CPython 中(但不能保证所有实现),从 Python3.7 开始,它甚至会得到保证。
-
@OliverBestwalter :明白,我试图在编辑中描述我的问题。
标签: python python-3.x list-comprehension