鱼C论坛

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

dict_values

[复制链接]
发表于 2019-5-17 20:30:01 | 显示全部楼层 |阅读模式

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

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

x
def entire():
    for tan in range(len(list(d1.keys()))):
        print("联系人{0:}:" + "\nname:{1:<30}phone:{2:<15}".format(tan, list(d1.keys())[tan], list(d1.values()[tan])) \
              + "\nemail:{0:<30}工作单位:{1:<15}".format(list(d2.keys())[tan], list(d2.values())[tan]))
错误:  
File "D:/PyCharm/pycharm 001/pycharm 项目及测试/通讯录.py", line 131, in entire
    + "\nemail:{0:<30}工作单位:{1:<15}".format(list(d2.keys())[tan], list(d2.values())[tan]))
TypeError: 'dict_values' object is not subscriptable
我没办法了,只能问论坛了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-18 06:50:47 From FishC Mobile | 显示全部楼层
把原始数据放出来啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-18 18:20:02 | 显示全部楼层
wp231957 发表于 2019-5-18 06:50
把原始数据放出来啊

大概是:
d1={}
d1['a']=123
d1['b']=345
for i in range(len(list(d1.keys()))):
        print(list(d1.keys()[i]),list(d1.values()[i]))
报错:
Traceback (most recent call last):
  File "<pyshell#5>", line 2, in <module>
    print(list(d1.keys()[i]),list(d1.values()[i]))
TypeError: 'dict_keys' object is not subscriptable
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-18 18:23:49 | 显示全部楼层
发错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-18 18:26:48 | 显示全部楼层
wp231957 发表于 2019-5-18 06:50
把原始数据放出来啊

def entire():
    if k in d1:
        for tan in range(len(list(d1.keys()))):
            print("联系人{0:}:" + "\nname:{1:<30}phone:{2:<15}".format(tan, list(d1.keys())[tan], list(d1.values()[tan])) \
                  + "\nemail:{0:<30}工作单位:{1:<15}".format(list(d2.keys())[tan], list(d2.values())[tan]))
这个模块(另外源代码只能拷贝发吗?)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-18 18:34:45 | 显示全部楼层
guanhaizhe 发表于 2019-5-18 18:20
大概是:
d1={}
d1['a']=123

d1, d2 = {}, {}

def begin():  # 开始
    s = "通讯录"
    print("{:-^30}".format(s) + "\n本通讯录以名字为媒介添加电话.email.工作单位\
且可进行添加联系人(默认为联系人1)")
    print("请按以下方式操作:" + "\n提示:(通讯录可持续执行,退出即结束)" + "\n"+\
          "电话:国际冠码-国际电话区号-封闭电话号码" + "(此电话号码仅指封闭电话号码)")
    print('"0"键退出通讯录,"1"键查询,"2"键添加,"3"键删除,"4"键全部查询,"5"键拓展知识' + "\n请输入:")

def transfer():  # 中转站
    k = eval(input())
    s = 0
    while k == 1 or k == 2 or k == 3:
        if s != 0:
            k = eval(input())
        if k == 1:
            inquire()
            execute()
        elif k == 2:
            e = addinitial()
            execute()
        elif k == 3:
            e = delete(e)
            execute()
        elif k == 4:
            entire()
            execute()
        elif k == 5:
            expand()
            execute()
        else:
            print("输入不符,请重新输入:")
        s += 1
    if k == 0:
        s1 = "已退出"
        print("{:*^30}".format(s1))


def inquire():  # 查询
    sin = 0
    if not d1:
        print("通讯录为空!")
    else:
        i = input("输入查询人:")
        # 两字典不能合并,属于并列关系
        if i in d1:
            for sin in range(len(d1.keys())):
                if list(d1.keys())[sin] == i:
                    print("存在,基本信息:")
                    print("name:{0:<30}phone:{1:}".format(i, d1[i]) + "\n"+\
                          "email:{0:<30}工作单位(work unit):{1:}".format(list(d2.keys())[sin], list(d2.values())[sin]))
        else:
            print("查询未有此人!")

def addinitial():  # 添加
    # 此处出现的错误在于不能将值赋给键,要通过str转换字符串,也不能通过变量赋值
    # 那样会直接把变量赋给键
    e = 1
    a = input("请输入联系人名称(name):")
    if a == "":
        a = "联系人" + str(e)
        e += 1
    b = input("电话(phone):")
    while addinitial1(b):
        b = input("输入方式不符题意,请重新输入:")
    d1[a] = b
    c = input("请输入电子邮箱(email)(一般格式:name@domain.com):")
    while addinitial2(c):
        c = input("格式不对,请重新输入:")
    d = input("工作单位(work unit):")
    d2[c] = str(d)
    print("已添加")
    return e

def addinitial1(a1):
    l = 0
    for i in a1:
        try:
            i = eval(i)
        except:
            break
        if type(i) == int:
            l += 1
    if l != 11:
        return True
    else:
        return False

def addinitial2(a):
    for i in a:
        if a[-4:] != ".com":
            return True
    for i in a[:-5]:
        if i == "@":
            return False
    return True

def delete(e):  # 删除
    cos = 0
    if not d1:
        print("通讯录已为空!无法删除")
    else:
        i = input("请输入你要删除的联系人:")
        # 提醒键
        a = eval(input("你确定要删除该联系人?(True确定或False算了)"))
        if a:
            if i in d1:
                for cos in range(len(list(d1.keys()))):
                    if list(d1.keys())[cos] == i:
                        del d1[i]
                        del d2[list(d2.keys())[cos]]
                print("已删除!")
                e -= 1
                return e
            else:
                print("此联系人不存在!")

def execute():  # 实现循环执行
    print("再次选择:")
    transfer()

def entire():
    if k in d1:
        for tan in range(len(list(d1.keys()))):
            print("联系人{0:}:" + "\nname:{1:<30}phone:{2:<15}".format(tan, list(d1.keys())[tan], list(d1.values()[tan])) \
                  + "\nemail:{0:<30}工作单位:{1:<15}".format(list(d2.keys())[tan], list(d2.values())[tan]))

def expand():
    print("国际电话区号,即国际电信联盟根据E.164标准分配给各国的代码。" + "\n"+\
        "所有的号码都是前缀号,也就是说这些号码是用来“拨到”目的国家的。"+\
        "\n每一个国家还有一个前缀来“拨出”自所处的国家,这个前缀叫国际" + "\n"+\
        "冠码。简言之,拨打国际电话的一般顺序是:国际冠码-国际电话区号-" + "\n"+\
         "封闭电话号码,或者:国际冠码-国际电话区号-国内电话区号-开放电话号码。")
    print("(区号)如:852 --香港(中华人民共和国特别行政区)" + "\n\t"+\
        "853 --澳门(中华人民共和国特别行政区)")

def main():
    begin()
    transfer()

main()
源代码是这,添加联系人后,全部查询出问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-18 18:35:32 | 显示全部楼层
字典的values()不支持下标
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-18 18:52:36 | 显示全部楼层
什么意思,怎么改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-18 18:53:59 | 显示全部楼层
塔利班 发表于 2019-5-18 18:35
字典的values()不支持下标

头一个发错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 08:45:08 | 显示全部楼层
guanhaizhe 发表于 2019-5-18 18:34
d1, d2 = {}, {}

def begin():  # 开始

字典打印不是这样打吗  你还有神马特殊需求吗

>>> for tan in d1.keys():
          print(d1[tan])
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-15 20:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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