鱼C论坛

 找回密码
 立即注册
查看: 1535|回复: 9

[已解决]求问一个字典的键值对是否能在另一个字典里找到

[复制链接]
发表于 2019-3-15 22:26:33 | 显示全部楼层 |阅读模式

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

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

x
dict1 = {'李四': '444'}
dict2 = {'张三': '333', '李四': '444'}

if dict1 in dict2.items():
    print("in")
elif dict1 not in dict2.items():
    print("not in")



为啥结果是not in
应该如何操作才能确认dict1的值包含在dict2中?
最佳答案
2019-3-15 22:50:31
in是按键值来判断不能整个列表
  1. dict1 = {'李四': '444'}
  2. dict2 = {'张三': '333', '李四': '444'}

  3. for e in dict1:
  4.     if e in dict2:
  5.         if dict1[e]!=dict2[e]:
  6.             print('not in')
  7.             break
  8.     else:
  9.         print('not in')
  10.         break
  11. else:
  12.     print('in')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-3-15 22:44:34 | 显示全部楼层
if dict1.items() in dict2.items():
    print('in')
这样就可以了吧
你的if语句写的是字典是否在列表里面的意思,所以当然是not in
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-15 22:50:31 | 显示全部楼层    本楼为最佳答案   
in是按键值来判断不能整个列表
  1. dict1 = {'李四': '444'}
  2. dict2 = {'张三': '333', '李四': '444'}

  3. for e in dict1:
  4.     if e in dict2:
  5.         if dict1[e]!=dict2[e]:
  6.             print('not in')
  7.             break
  8.     else:
  9.         print('not in')
  10.         break
  11. else:
  12.     print('in')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-3-15 22:52:08 | 显示全部楼层
本帖最后由 ba21 于 2019-3-15 23:04 编辑

发现楼上办法更好,可以简化
dict1 = {'李四': '444'}
dict2 = {'张三': '333', '李四': '444'}

for e in dict1:
    if e in dict2:
        if dict1[e]==dict2[e]:
            print('in')
            break
else:
    print('not in')




dict1 = {'李四': '444'}
dict2 = {'张三': '333', '李四': '444'}

isIn = False
for i1 in dict1.items():
    for i2 in dict2.items():
        if i1==i2:
            isIn = True
            
        else:
            isIn = False
            
if isIn:
    print("in")
else:
    print("not in")

或:
dict1 = {'李四': '444'}
dict2 = {'张三': '333', '李四': '444'}

isIn = False
for key1, value1 in dict1.items():
    for key2, value2 in dict2.items():
        if key1==key2 and value1==value2:
            isIn = True
            
        else:
            isIn = False

if isIn:
    print("in")
else:
    print("not in")
        
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-3-16 12:45:31 | 显示全部楼层
你其实是没有搞懂in的用法,in的用法是:元素 in 可迭代对象,dict是有键和值两个元素集合的迭代对象,举个例子你意会下:
例1:
>>> a=[1,2]
>>> a in a
False
>>> a[0] in a
True
>>> a[0]==1
True
>>>
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2019-3-16 14:09:00 | 显示全部楼层
hidewind 发表于 2019-3-16 12:45
你其实是没有搞懂in的用法,in的用法是:元素 in 可迭代对象,dict是有键和值两个元素集合的迭代对象,举个 ...

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

使用道具 举报

 楼主| 发表于 2019-3-16 14:09:46 | 显示全部楼层
ba21 发表于 2019-3-15 22:52
发现楼上办法更好,可以简化
dict1 = {'李四': '444'}
dict2 = {'张三': '333', '李四': '444'}

谢谢帮助,受教了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-16 14:10:59 | 显示全部楼层
Will_M 发表于 2019-3-15 22:44
if dict1.items() in dict2.items():
    print('in')
这样就可以了吧

这个试过了,还是不行,不过找到答案了,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-3-16 20:43:27 | 显示全部楼层
如果是key和value都要相同可以用集合的方法。
  1. dict1 = {'李四': '444'}
  2. dict2 = {'张三': '333', '李四': '444'}
  3. set1 = set(dict1.items())
  4. set2 = set(dict2.items())
  5. if set1 & set2:
  6.     print('in')
  7. else:
  8.     print('not in')

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

使用道具 举报

 楼主| 发表于 2019-3-16 20:57:39 | 显示全部楼层
冬雪雪冬 发表于 2019-3-16 20:43
如果是key和value都要相同可以用集合的方法。

谢谢,正准备学集合这一集
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-22 03:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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