首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问字典元素并与字符串和打印连接

访问字典元素并与字符串和打印连接
EN

Stack Overflow用户
提问于 2020-04-17 07:45:56
回答 4查看 121关注 0票数 0

我开始学习蟒蛇了。在此代码中,我试图打印输入用户的生日以及他/她的姓名。我正在使用字典来实现这个功能。下面是我的代码片段

代码语言:javascript
运行
复制
n=input("Enter Name: ")
    def birth():
        dict1={{"name":"X","birthdate":"16-June-1989"},{"name":"Y","birthdate":"23-08-1990"}}
        if dict1["name"]==n:
            print(dict1["name"]+"'s birth was on " +dict1["birthdate"])
        else:
            print("Not in database")
    birth()

在输入X时,我的预期输出应该如下所示:

代码语言:javascript
运行
复制
X's birthdate was on 16-June-1989

但是我的错误越来越少,我尝试了一个在线搜索,但我想了解我在这里错过了什么。我相信我会得到很多评论。但我也相信,许多人将提供建设性的和学习的建议。

代码语言:javascript
运行
复制
  File "main.py", line 8, in <module>                                                                                   
    birth()                                                                                                             
  File "main.py", line 3, in birth                                                                                      
    dict1={{"name":"X","birthdate":"16-June-1989"},{"name":"Y","birthdate":"23-08-1990"}}                               
TypeError: unhashable type: 'dict'
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-04-17 10:40:24

因为字典变量dict1不能解析自己的元素,所以需要创建一个变量/对象来解析通过解析变量p完成的字典元素。

代码语言:javascript
运行
复制
n=input("Enter name: ")
def birth(n):  
        dict1=[{"name":"X","birthdate":"16-June-1989"},{"name":"Y","birthdate":"23-08-1990"}] 
        for p in dict1: 
            if p["name"]==n: 
               print(p["name"]+"'s birth was on " +p["birthdate"])
               break;
            else: 
                print("Not in database")
                break;
birth(n)
票数 1
EN

Stack Overflow用户

发布于 2020-04-17 07:54:44

定义dict1的方式是不正确的。应该是这样的:

代码语言:javascript
运行
复制
In [1131]: def birth(n): 
      ...:         #dict1={{"name":"X","birthdate":"16-June-1989"},{"name":"Y","birthdate":"23-08-1990"}} 
      ...:         dict1=[{"name":"X","birthdate":"16-June-1989"},{"name":"Y","birthdate":"23-08-1990"}] 
      ...:         for d in dict1: 
      ...:             if d["name"]==n: 
      ...:                 print(d["name"]+"'s birth was on " +d["birthdate"]) 
      ...:             else: 
      ...:                 print("Not in database") 
      ...:                                                                                                                                                                                                  

In [1132]: birth(n)                                                                                                                                                                                         
X's birth was on 16-June-1989

此外,如果将用户输入n作为参数传递给函数birth,则更有意义。然后调用类似于birth(n)的方法。

否则,该方法将与名为n的变量紧密耦合。

票数 1
EN

Stack Overflow用户

发布于 2020-04-17 08:10:25

那是因为你的初始化错误。在python中,花括号不仅用于dict文字,而且用于set文字。您可以在这个问题中获得更多信息。

例如:

代码语言:javascript
运行
复制
# that will be a dict:
d = {"name": "My name", "birthdate": "16-June-1989"}

# and that will be a set:
d = {"name", "birthdate"}

# your line 3 has set initialization, which contains 2 dicts of user info:
dict1={{"name":"X","birthdate":"16-June-1989"},{"name":"Y","birthdate":"23-08-1990"}}

另一个问题是Python集合中必须只包含可哈斯的元素和dict,这是不可接受的。这是解释

因此,您应该将dict1变量类型更改为list或tuple。如果您需要更多关于列表、集合和元组之间的差异的信息,这里有一个关于数据结构的python 文档的链接。

此外,您的函数还将为数据库中的每个条目打印一些内容。我认为在函数执行之后只需要打印一次。

因此,您的功能应该如下所示:

代码语言:javascript
运行
复制
def birth(name):
    database = [{"name": "X", "birthdate": "16-June-1989"},
                {"name": "Y", "birthdate": "23-08-1990"}]
    found = False
    for entry in database:
        if entry["name"] == name:
            print(entry["name"] + "'s birth was on " + entry["birthdate"])
            found = True
            break
    if not found:
        print("Not in database")


birth('X')
# Will print: X's birth was on 16-June-1989
birth('My name is')
# Will print: Not in database
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61266478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档