python字典的问题

RewardIsEnough 2015-01-01 10:27:16
各位朋友,我最近在学习写一个算法,遇到了一个字典的问题,问题描述如下:
比如我有如下的字典(其实我的数据量很大,有十万条,这里只是举个例子):

test={
"1":{
"1":4,
"2":3,
"3":5,
"4":5
},
"2":{
"1":3,
"2":4,
"3":4,
"4":3
},
"3":{
"1":5,
"2":3,
"3":5,
"4":2
}
}

我想判断如果一个值不在字典里的操作。我之前的代码如下:
if simiid in (test.get(userid)).values():
sim_i_n+=simi
s_r+=simi*test[userid][simiid]

因为判断一个值(不是key)是否在一个字典里,可以用上面的方法。但是我想问,如果想判断一个值(不是key)不在字典里,然后执行elseif的操作。这样该怎么写?
另外有个疑问,代码如下:
 s_r=0
for simiid,simi in simiDict.items():
print """-------------print the simi------------------------------"""
print simi
if simiid in (test.get(userid)).values():
sim_i_n+=simi
s_r+=simi*test[userid][simiid]
print '''-------------print test[userid][simiid]----------------------'''
print test[userid][simiid]
continue
#problem is in the continue problem
print """----------print S_R-----------------------"""
print s_r

打印发现s_r居然是0,然后我怀疑是不是continue方法出了问题,在if这个代码块执行之后没有真正赋值给s_r。我觉得很奇怪。
...全文
147 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
-柚子皮- 2015-01-04
  • 打赏
  • 举报
回复
想判断一个值(不是key)不在字典里: lists = [[i for i in value.values()] for value in test.values()] s = set() for list in lists: s |= set(list) 但是一个值对应不止一个key,所以楼主要非这样,一定是程序算法逻辑有些问题
DarkChampion 2015-01-03
  • 打赏
  • 举报
回复
还有,你的if判断有问题吧,key是字符串,value是int,你是不是直接拿来比较了
DarkChampion 2015-01-03
  • 打赏
  • 举报
回复
调试一下,你这个if块进去过了吗?
RewardIsEnough 2015-01-03
  • 打赏
  • 举报
回复
for simiid in dddd.items():
RewardIsEnough 2015-01-03
  • 打赏
  • 举报
回复
引用 7 楼 DarkChampion 的回复:
最简单的办法,就是直接在if块中加一个print语句,看有没有输出 字符串转int:
int(simiid)
大牛,以后多向你请教!
DarkChampion 2015-01-03
  • 打赏
  • 举报
回复
最简单的办法,就是直接在if块中加一个print语句,看有没有输出 字符串转int:
int(simiid)
RewardIsEnough 2015-01-03
  • 打赏
  • 举报
回复
引用 4 楼 DarkChampion 的回复:
调试一下,你这个if块进去过了吗?
引用 4 楼 DarkChampion 的回复:
调试一下,你这个if块进去过了吗?
怎么判断调试有没有进去?
if simiid in (test.get(userid)).values():
怎么把数据类型也变成相同的类型?
panghuhu250 2015-01-02
  • 打赏
  • 举报
回复
把代码再贴一遍吧, 对python来讲, 只有缩进正确, 才能明白你的程序的逻辑流程. 帖子发送前可以用预览功能检查代码显示是否正确 一些题外话:

if simiid in (test.get(userid)).values():
                    sim_i_n+=simi
                    s_r+=simi*test[userid][simiid]
从你用.get(userid)来看,userid可能不存在. test.get(userid)最好用test.get(userid, {}), 否则userid不存在时, 后面的.values()就会出异常.
RewardIsEnough 2015-01-02
  • 打赏
  • 举报
回复
引用 2 楼 panghuhu250 的回复:
把代码再贴一遍吧, 对python来讲, 只有缩进正确, 才能明白你的程序的逻辑流程. 帖子发送前可以用预览功能检查代码显示是否正确 一些题外话:

if simiid in (test.get(userid)).values():
                    sim_i_n+=simi
                    s_r+=simi*test[userid][simiid]
从你用.get(userid)来看,userid可能不存在. test.get(userid)最好用test.get(userid, {}), 否则userid不存在时, 后面的.values()就会出异常.
我把代码再发一遍: 我想判断如果一个值不在字典里的操作。我之前的代码如下:
if simiid in (test.get(userid)).values():
    sim_i_n+=simi
    s_r+=simi*test[userid][simiid]
因为判断一个值(不是key)是否在一个字典里,可以用上面的方法。但是我想问,如果想判断一个值(不是key)不在字典里,然后执行elseif的操作。这样该怎么写? 另外有个疑问,代码如下:
s_r=0
for simiid,simi in simiDict.items():
    print """-------------print the simi------------------------------"""
    print simi
    if simiid in (test.get(userid)).values():
        sim_i_n+=simi
        s_r+=simi*test[userid][simiid]
        print '''-------------print test[userid][simiid]----------------------'''
        print test[userid][simiid]
        continue
        #problem is in the continue problem
    print """----------print S_R-----------------------"""
    print s_r 
打印发现s_r居然是0,然后我怀疑是不是continue方法出了问题,在if这个代码块执行之后没有真正赋值给s_r。我觉得很奇怪。
RewardIsEnough 2015-01-01
  • 打赏
  • 举报
回复
代码复制的有点问题,我的疑问是,执行完if代码块之后,其实并没有真正的赋值,可能问题就出在continue那里吧

37,721

社区成员

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

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