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

时间:2020-01-16 19:40:13

标签: python list dictionary

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

{1: {"name": "Leo", "days": range(1, 61)}, 2: {"name": "Gemini", "days": range(61, 122)}, ....

因此,在上面的示例中,如果用户输入25,我想输出“ Leo”。我怎样才能做到这一点?最初,我想到了if语句,但是有没有一种方法可以基于“ days”子元素访问“ name”子元素?

因此,如果输入为25, 我希望输出为Leo

4 个答案:

答案 0 :(得分: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])

答案 1 :(得分:0)

您可以这样操作:

我已将您的字典D命名为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]允许迭代所有(名称,天)元素。

if x in D[d]['days']是一个要素必须满足的条件,我想只有一个要素是这种情况。

我先用[0],然后是name

from_user(25)返回'Leo'

答案 2 :(得分:0)

理想情况下,您希望结构化词典以使其易于根据键查找值,因此,最好重做词典,使日期为键,名称为值。

例如:

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]等。

答案 3 :(得分:0)

一个选项是简单的for循环。遍历键,检查数字是否在'days'范围内,如果是,则打印'name'(或做任何需要的名字)并中断(不需要进一步遍历)。如果不间断,则打印有关此消息(或采取任何其他措施)。

for key in d:
    if 25 in d[key]['days']:
         print(d[key]['name'])
         break
else:
    print('Not found')