Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何根据另一个元素访问字典的子元素?_Python_List_Dictionary - Fatal编程技术网

Python 如何根据另一个元素访问字典的子元素?

Python 如何根据另一个元素访问字典的子元素?,python,list,dictionary,Python,List,Dictionary,嘿,我创建了这个字典,希望能够基于另一个元素访问其中一个元素。因此,在主字典中,我有一个字典,其中包含“name”和“days”,并基于用户输入(他们将输入日期),我希望输出名称 {1: {"name": "Leo", "days": range(1, 61)}, 2: {"name": "Gemini", "days": range(61, 122)}, .... 在上面这个例子中,如果用户输入25,我想输出“Leo”。我该怎么做?最初我想做的只是if语句,但是有没有一种方法可以基于“day

嘿,我创建了这个字典,希望能够基于另一个元素访问其中一个元素。因此,在主字典中,我有一个字典,其中包含“name”和“days”,并基于用户输入(他们将输入日期),我希望输出名称

{1: {"name": "Leo", "days": range(1, 61)}, 2: {"name": "Gemini", "days": range(61, 122)}, ....
在上面这个例子中,如果用户输入25,我想输出“Leo”。我该怎么做?最初我想做的只是if语句,但是有没有一种方法可以基于“days”子元素访问“name”子元素呢

因此,如果输入为
25

我希望输出为
Leo

您可以扫描dict中的元素

dict.items()
例如,使用列表理解:

zodiac_signs = {1: {"name": "Leo", "days": range(1, 61)}, 2: {"name": "Gemini", "days": range(61, 122)}}
zodiac_matching_day = [zodiac['name'] \
                       for n, zodiac in zodiac_signs.items() \
                       if 25 in zodiac['days']]
if len(zodiac_matching_day) > 0:
    print(zodiac_matching_day[0])

你可以浏览目录中的元素

dict.items()
例如,使用列表理解:

zodiac_signs = {1: {"name": "Leo", "days": range(1, 61)}, 2: {"name": "Gemini", "days": range(61, 122)}}
zodiac_matching_day = [zodiac['name'] \
                       for n, zodiac in zodiac_signs.items() \
                       if 25 in zodiac['days']]
if len(zodiac_matching_day) > 0:
    print(zodiac_matching_day[0])

您可以这样做:

我已将您的dict命名为D,并将其限制为2个元素

D = {1: {"name": "Leo", "days": range(1, 61)}, 2: {"name": "Gemini", "days": range(61, 122)}}
我们可以定义lambda函数以满足您的需要:

from_user = lambda x: [D[d] for d in D if x in D[d]['days']][0]['name']
[D[D]for D in D]
允许迭代所有(名称、天数)元素

D = {1: {"name": "Leo", "days": range(1, 61)}, 2: {"name": "Gemini", "days": range(61, 122)}}
如果x在D[D]['days']
是一个元素必须遵守的条件,我想只有一个元素是这样的

我取第一个带有
[0]
的,然后是
名称


from_user(25)
返回
'Leo'

您可以这样做:

我已将您的dict命名为D,并将其限制为2个元素

D = {1: {"name": "Leo", "days": range(1, 61)}, 2: {"name": "Gemini", "days": range(61, 122)}}
我们可以定义lambda函数以满足您的需要:

from_user = lambda x: [D[d] for d in D if x in D[d]['days']][0]['name']
[D[D]for D in D]
允许迭代所有(名称、天数)元素

D = {1: {"name": "Leo", "days": range(1, 61)}, 2: {"name": "Gemini", "days": range(61, 122)}}
如果x在D[D]['days']
是一个元素必须遵守的条件,我想只有一个元素是这样的

我取第一个带有
[0]
的,然后是
名称


from_user(25)
返回
'Leo'

理想情况下,您希望构建字典,使其易于根据键查找值,因此您最好重新编写字典,以日数为键,名称为值

例如:

dict = {}
for num in range(1,12):
    if num > 6:
        dict[num] = 'Gemini'
    else:
        dict[num] = 'Leo'
dict

{1: 'Leo',
 2: 'Leo',
 3: 'Leo',
 4: 'Leo',
 5: 'Leo',
 6: 'Leo',
 7: 'Gemini',
 8: 'Gemini',
 9: 'Gemini',
 10: 'Gemini',
 11: 'Gemini'}

然后,您所要做的就是调用dict[1]、dict[7]等等。

理想情况下,您希望构建字典,使其易于根据键查找值,因此您最好重新编写字典,以便日数是键,名称是值

例如:

dict = {}
for num in range(1,12):
    if num > 6:
        dict[num] = 'Gemini'
    else:
        dict[num] = 'Leo'
dict

{1: 'Leo',
 2: 'Leo',
 3: 'Leo',
 4: 'Leo',
 5: 'Leo',
 6: 'Leo',
 7: 'Gemini',
 8: 'Gemini',
 9: 'Gemini',
 10: 'Gemini',
 11: 'Gemini'}

然后您所要做的就是调用dict[1],dict[7]等等。

有一个选项对于循环很简单。迭代键,检查数字是否在“天”范围内,如果是,则打印“名称”(或对名称执行任何需要的操作)并中断(无需进一步迭代)。如果没有中断,则打印相关消息(或采取任何其他措施)


一个选项是简单的for循环。迭代键,检查数字是否在“天”范围内,如果是,则打印“名称”(或对名称执行任何需要的操作)并中断(无需进一步迭代)。如果没有中断,则打印相关消息(或采取任何其他措施)


欢迎来到SO。这不是一个讨论论坛或教程。请花点时间阅读和阅读该页面上的其他链接。花些时间练习这些例子。它将让您了解Python提供的帮助您解决问题的工具。这不是一个讨论论坛或教程。请花点时间阅读和阅读该页面上的其他链接。花些时间练习这些例子。它将让您了解Python提供的帮助您解决问题的工具。