如何在 python 字典中返回值

问题描述 投票:0回答:5

我是 python 的新手,我正在尝试使用一个字典,其中包含类似于以下布局的键:

    dict = {
        'Tim': ['red', 'pizza', 'soda'],
        'Jake': ['green', 'burger', 'juice'],
        'Mary': ['blue', 'salad', 'water']
    }

我将如何让用户输入姓名,然后将该人的信息内容设置为代码中的变量值? 例如,如果用户选择查看有关 Jake 的信息,则:

    favoriteColor = green
    favoriteFood = burger
    favoriteDrink = juice

我真的只是不知道如何在 python 中调用这个特定类型字典中的特定值。会不会是类似这样的东西:

favoriteColor = dict.Jake[0]
favoriteFood = dict.Jake[1]
favoriteDrink = dict.Jake[2]
python dictionary variables calling-convention
5个回答
0
投票

您可以像这样访问字典中的每个条目:

dict["Jake"]

这将返回列表

['green', 'burger', 'juice']

然后您可以像这样从该列表中获取您需要的任何元素(例如他们最喜欢的颜色):

dict["Jake"][0]

会返回

'green'

0
投票

你可以通过首先使用 .get() 方法来实现这一点,然后通过它们的特定变量过滤掉它们。

例如,您可以使用以下片段作为如何执行此操作的概述:

# Initial dictionary
dict = {
    'Tim': ['red', 'pizza', 'soda'],
    'Jake': ['green', 'burger', 'juice'],
    'Mary': ['blue', 'salad', 'water']
}

# Check input for name
name = input("Enter a name:")

# Returns values for inputted name in dictionary
name_values_in_dict = dict.get(name)

# If it is none, return that it could not be found.
if name_values_in_dict is None:
     print("Name could not be found in dictionary.")

# If it is found, store in variables and print them out.
favoriteColor = name_values_in_dict[0]
favoriteFood = name_values_in_dict[1]
favoriteDrink = name_values_in_dict[2]

print(f'Favorite color is: {favoriteColor}, favorite food is: {favoriteFood}, and favorite drink is: {favoriteDrink}')

0
投票

使用一个列表,其中每个元素都隐含地对应于某种类型(在本例中是颜色、食物、饮料)很少是一个好主意。使用类要好得多。然后,通过明智的变量命名,很明显每个值的含义。像这样的东西:

class Favourites:
    def __init__(self, food, colour, drink):
        self._food = food
        self._colour = colour
        self._drink = drink
    def __repr__(self):
        return f'{self._food=} {self._colour=} {self._drink=}'

database = dict()

while (name := input('Name: ')):
    food = input('Food: ')
    colour = input('Colour: ')
    drink = input('Drink: ')
    database[name] = Favourites(food, colour, drink)

print(database)

现在我们可以为多人输入“收藏夹”了。只需按回车键(空输入)即可打破循环并查看构建的内容


0
投票

好吧,既然你是新来的,我会试着解释一下。

首先,尽量不要使用保留字作为变量名

dict
是类型
dictionary
的python保留字。

关于用户输入,我建议您阅读:Python 中的基本输入、输出和字符串格式

Dicts 的一个非常高的视图...

Python 字典是键值对的集合,这意味着您有多个项目,每个项目都有一个“索引”或“名称”(键)和一个值(任何东西,在您的情况下,列表)

所以当你有:

MyDict = {
    'Tim': ['red', 'pizza', 'soda'],
    'Jake': ['green', 'burger', 'juice'],
    'Mary': ['blue', 'salad', 'water']
}

这意味着您有 3 个键,Tim、Jake 和 Mary,因此如果您使用键

Tim
,您将访问该项目的值,即列表:
['red', 'pizza', 'soda']
并获取该列表的第一个元素你可以:

tim_favorite_color = MyDict['Tim'][0]

# Which is the same as:
tim_favorites = MyDict['Tim']
tim_favorite_color = tim_favourites[0] # red

附录

为了使您的代码更具可读性,您可以为收藏夹列表使用另一种数据结构,我建议使用 namedtuple

from collections import namedtuple

FavoriteValues = namedtuple("FavoriteValues", ["color", "food", "drink"])
Favorites = {
    'Tim': FavoritesValues('red', 'pizza', 'soda')
}
# This allows you write code like:
Favorites['Tim'].food  # pizza

更好...

我会为你准备一些东西,你必须搜索关于 类和 lambda ;)

所以,你想用来使你的代码更好的另一件事是使用 DefaultDict 和类。

from collections import defaultdict


class TFavorite:

    def __init__(self, color, food, drink):
        self.color = color
        self.food = food
        self.drink = drink

Favorites = defaultdict(lambda: TFavorite('unknown', 'unknown', 'unknown'))

# prints 'unknown' first time we lookup for Tim
# so no previous info.
print(Favorites['Tim'].color) 

Favorites['Tim'].color = 'red'
print(Favorites['Tim'].color) # prints 'red'

print(Favorites['Tim'].food) # still unknown

0
投票

正如其他人已经提到的,将变量命名为

dict
并不是最好的主意,因为它已经在 python 中意味着某些东西,所以我将在我的其余答案中将其重新定义为
favsDict
作为上下文。

favsDict = { 'Tim': ['red', 'pizza', 'soda'],
             'Jake': ['green', 'burger', 'juice'],
             'Mary': ['blue', 'salad', 'water']    }

我真的不知道如何在python中调用这个特定类型字典中的特定值

您可能想看看有关 dictionaries 的文档以及如何使用键访问值 [以及 lists,其值可以使用索引访问],但下面是一些使用

favsDict
的示例:

  • favsDict['Jake']
    应该回来
    ['red', 'pizza', 'soda']
  • favsDict['Tim'][0]
    应该回来
    'red'
  • favsDict['Mary'][2]
    应该回来
    'water'
  • tim_ffood = favsDict['Tim'][1]
    实际上应该与
    tim_ffood = 'pizza'
  • 相同

我将如何让用户输入姓名,然后将该人的信息内容设置为代码中的变量值?

通常使用内置的

input
函数来提示和获取用户输入,并且有多种设置变量的方法。 (下面示例的View tests。)

search_name = input('Please enter a name: ')
if search_name in favsDict:
    favsList = favsDict[search_name]

    # favoriteColor, favoriteFood, favoriteDrink = favsDict[search_name] # = favsList ## OR
    # favoriteColor,favoriteFood,favoriteDrink = favsList[0],favsList[1],favsList[2] ## OR

    favoriteColor = favsList[0] # favsDict[search_name][0]
    favoriteFood = favsList[1] # favsDict[search_name][1]
    favoriteDrink = favsList[2] # favsDict[search_name][2]

    for fCat, fVal in zip(['color','food','drink'], favsList): 
        print(f"\t{search_name}'s favourite {fCat} is {fVal}")
else: print(f'! Could not find any records for {repr(search_name)} !')

如果你想从用户输入

(
)view test构建favsDict并且你有一定数量的人要添加:

personsCt = 3 # how many names/people
fav_categories = ['Color', 'Food', 'Drink'] # list template for asking

favsDict = {input(f'\n[Person#{i+1}] Please Enter\n\tName: '): [
    input(f'\tFavorite {f}: ') for f in fav_categories
] for i in range(personsCt)}

print()
favsDict

如果想让用户决定什么时候停止,可以使用

while
循环(view test)

fav_categories = ['color', 'food', 'drink'] # list template for asking
favsDict = {} # initiate

while (pName := input(f'\n[Just press Enter to exit]\nEnter name: ')):
    fPromptr = lambda fc: input(f"\t{pName}'s favorite {fc} is: ")
    favsDict[pName] = [fPromptr(fCat) for fCat in fav_categories]

print()
favsDict

顺便说一句,walrus operator

:=
仅适用于 python 3.8 或更高版本;没有它,你需要
pName=input(...)
while pName:...
like this之前和结尾。

请注意,如果重复任何名称,则只会保留该名称的最新输入数据。

© www.soinside.com 2019 - 2024. All rights reserved.