鱼C论坛

 找回密码
 立即注册
查看: 2608|回复: 12

一个基础问题:字典中如何根据values找出对应的key

[复制链接]
发表于 2016-11-14 22:41:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 jll421740865 于 2016-11-14 23:04 编辑

有一个确定的字典类型,比如说是
dict = {'traffic':['subway','taxi','bus'],'brand':['nike','converse','adidas'],'building':['taibei101','diwangdasha']}  举个例子啊。

现要写一个方法,传入一个字符串,判断它属于哪一个key,返回这个key的值。怎么实现。
比如str1 = 'nike'   str1属于brand    str2 = 'subway'  str2属于traffic。。

该如何写这个方法呢。帮忙想一下啦,各路大神们
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-11-15 09:21:56 | 显示全部楼层
dict_list = {'traffic':['subway','taxi','bus'],'brand':['nike','converse','adidas'],'building':['taibei101','diwangdasha']}
list1=list(dict_list.keys())
j=0
for i in list1:
          list2=list(dict_list[list1[j]])
          print(list2)
          j+=j
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-15 09:24:42 | 显示全部楼层
本帖最后由 BlackMan 于 2016-11-15 09:27 编辑

dict_list = {'traffic':['subway','taxi','bus'],'brand':['nike','converse','adidas'],'building':['taibei101','diwangdasha']}

list1=list(dict_list.values())
print(list1)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-15 11:19:30 | 显示全部楼层
  1. dict1 = {'traffic':['subway','taxi','bus'],'brand':['nike','converse','adidas'],'building':['taibei101','diwangdasha']}
  2. str1 = 'nike'
  3. str2 = 'subway'
  4. for key, value in dict1.items():
  5.     if str1 in value:
  6.         print('%s属于%s'%(str1, key))
  7.     if str2 in value:
  8.         print('%s属于%s'%(str2, key))
复制代码

  1. subway属于traffic
  2. nike属于brand
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-15 11:31:51 | 显示全部楼层
BlackMan 发表于 2016-11-15 09:24
dict_list = {'traffic':['subway','taxi','bus'],'brand':['nike','converse','adidas'],'building':['tai ...

我试一下,谢谢你。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-15 11:33:26 | 显示全部楼层

感谢你,请问这里用到了正则表达式吗,新人不太懂,学习中
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-15 11:35:50 | 显示全部楼层
jll421740865 发表于 2016-11-15 11:33
感谢你,请问这里用到了正则表达式吗,新人不太懂,学习中

没有用到正则,就是用for遍历字典的键和值,如果字符串在值中,就输出键。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-15 15:13:31 | 显示全部楼层
冬雪雪冬 发表于 2016-11-15 11:35
没有用到正则,就是用for遍历字典的键和值,如果字符串在值中,就输出键。

好的,另想问下。现在我这个已有的dict数据很大。大括号里面有20组,也就是有20个KV对。每一个KV对中的value是一个包括100个字符串的列表。比如属于brand的list里面有100个字符串。有20组KV
就是说让str1 = 'nike'在2000个字符串中去匹配

这样的话,第一个问题是写出来看起来不好看,内容太长了,一起就是2000个字符串,太冗长了。
第二个就是遍历这么大的dict会不会运行很慢。

有没有这样的解决方法:另外写一个配置文件,拿到一个str就上这个配置文件去匹配。可以吗,如果可以,该如何实现呢。谢谢你


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-15 15:20:15 | 显示全部楼层
两个问题一起回答:
你的目的是以V找K,这完全没有利用字典的特点,无论如何找都是不方便的。可能的话以'subway'、'taxi、,'bus'等为K,以'traffic'为V重新构建一个字典。
如果利用现有的字典可将V变成集合,查找的速度会提高。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-15 15:36:59 | 显示全部楼层
冬雪雪冬 发表于 2016-11-15 15:20
两个问题一起回答:
你的目的是以V找K,这完全没有利用字典的特点,无论如何找都是不方便的。可能的话以's ...

好的,我试试将V变成集合。刚也百度了下,200条数据以上的话,for d,x in dict.items(): 的方式貌似比for (d,x) in dict.items(): 的方式执行的时间少
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-18 23:39:31 | 显示全部楼层
本帖最后由 BlackMan 于 2016-11-18 23:41 编辑

import datetime
time1 = datetime.datetime.now()
for i int range(100):
     pass
time2 = datetime.datetime.now()
print("for循环用的时间为:"time2-time1)
可以用这段代码试试那个效率更高,用的时间少。最近我也遇到了类似字典中数据写入和查询的事情,也是苦于没有好的方法,暂时放弃了,改用的mysql数据库来实现的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-19 10:59:09 | 显示全部楼层
BlackMan 发表于 2016-11-18 23:39
import datetime
time1 = datetime.datetime.now()
for i int range(100):

这不乏是一个好的思路,python操作数据据库我还不会,刚接触
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-20 12:17:18 | 显示全部楼层
jll421740865 发表于 2016-11-19 10:59
这不乏是一个好的思路,python操作数据据库我还不会,刚接触

http://bbs.fishc.com/forum.php?m ... p;page=1#pid2719608
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-23 22:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表