Python 字典 一个重复key 返回不同value值的问题

wu5261092 2018-01-18 10:31:36
各位好

最近在自学MIT 6.00 Introduction to Computer Science and Programming。

一个习题卡了我很久,马上就要成功的时候,又被这个看似很容易解决的问题卡住了,搜了一圈也没找到答案,只能求助超多大神的CSDN

目的:输入任何乱序字母,返回所有这些字母所能组成的所有单词。

举例:输入“gisn” 可以返回sing,sign,gins

实现这个目标其实不难(其实也是该习题的前置问题),代码耗时0.3s左右可以实现。

但习题给出的提示是建立一个超大的字典,将所有单词的乱序组合作为key,而该单词作为value。(这个单词字母上限我只敢控制在小于等于7,此时已经六千万个值了...)
这一步已经做好了,下面是一个范例
{'big': 'big', 'bgi': 'big', 'ibg': 'big', 'igb': 'big', 'gbi': 'big', 'gib': 'big'}

现在问题来了,我可以随便输入乱序的字母,可以得到一个单词,但不能返回所有的值。

比如不管我输入“gisn” 还是“snig”,返回的都是sing。

我也想过将value 和 key值对换,利用
def get_keys(d, value):
return [k for k,v in d.items() if v == value]

来反向寻值,但这下时间复杂度就蹭蹭的往上涨,习题要求建立字典的方式我猜就是为了让我们理解空间换时间这一概念。

好了,问题基本描述完毕,求助大神!

我的想法是如果可以实现一个重复key 返回不同value值,我这个题目就算做完了。

如果有其他实现的途径,也欢迎指点!


...全文
2220 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
字典本身是不允许重复key的,你添加的任何重复key的键值对都只会留下最后添加的那个
混沌鳄鱼 2018-01-24
  • 打赏
  • 举报
回复 2

>>> lis = [('ab',1), ('ab',2), ('ab',3), ('cd',4), ('ef',5)]
>>> new_dic = {}
>>> for k_v in lis:
	    k, v = k_v
	    new_dic.setdefault(k, []).append(v)

	    
>>> new_dic
{'ab': [1, 2, 3], 'cd': [4], 'ef': [5]}
>>> 
混沌鳄鱼 2018-01-24
  • 打赏
  • 举报
回复
dic={'ab':1,'ab':2,'ab':3,'cd':4,'ef':5} 这是不存在的
wu5261092 2018-01-23
  • 打赏
  • 举报
回复
非常感谢你提供的思路,我已经利用这个思路把作业完成了,但还有一个延伸出来的问题想请教 如何把 dic={'ab':1,'ab':2,'ab':3,'cd':4,'ef':5} 变为 new_dic={'ab':[1,2,3],'cd':4,'ef':5}
混沌鳄鱼 2018-01-19
  • 打赏
  • 举报
回复 2

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Python 3.6

word_list = """sing sign gins who how dad add""".split()


def word2key(search_str):
    return ''.join(sorted(search_str))


key_dict = {}
for word in word_list:
    key = word2key(word)
    key_dict.setdefault(key, []).append(word)
print(key_dict)


def search(kw_str):
    return key_dict.get(word2key(kw_str), 'Not Found!')


print(search('gnis'))
print(search('ohw'))
print(search('abc'))


{'gins': ['sing', 'sign', 'gins'], 'how': ['who', 'how'], 'add': ['dad', 'add']}
['sing', 'sign', 'gins']
['who', 'how']
Not Found!

  • 打赏
  • 举报
回复
{"big":["big","bgi",...]原单词为key , value里存所有组合的list

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧