鱼C论坛

 找回密码
 立即注册
查看: 2238|回复: 19

[已解决]不好意思表达错误,我修改了一下,从字典里面取值

[复制链接]
发表于 2020-9-9 08:22:17 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 lanyacp 于 2020-9-9 09:46 编辑

从字典中的的字典取值
比如字典{{姓名:张三,结果:35%,身高:170},{姓名:李四,结果:32%,身高:160},{姓名:王五,结果:28%,身高:180}}
从字典中去取出结果大于30%的人的身高值,组成一个列表结果【170,160】
如何去编写
求大神解决
谢谢
最佳答案
2020-9-9 10:59:02
下面程序第四行,帮你解释一下。
people['结果']这个是取出字典中key为'结果'的值,即'35%',然后再去掉该字符串的最后一位% ,people['结果'][:-1],得到"35",再用int()将之转为数字,最后和30进行比较
def find_heigh(list1):
    heigh=[]
    for people in list1:
        if int(people['结果'][:-1])>30:
            heigh.append(people['身高'])
    return heigh

list1=[{"姓名":"张三","结果":"35%","身高":170},{"姓名":"李四","结果":"32%","身高":160},{"姓名":"王五","结果":"28%","身高":180}]
print(find_heigh(list1))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-9-9 08:29:18 | 显示全部楼层
尽量用个函数,因为后面有好多个字典
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 08:44:26 | 显示全部楼层
搞三个列表,一个放姓名,一个放年龄,一个放身高。
循环年龄列表判断是否满足条件,满足则获取下标,并返回对应身高下标并加入新列表,循环结束返回新列表。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 09:08:36 | 显示全部楼层
a ={'张三':['35','170'],'李四':['32','160'],'王五':['28','180']}
查询方式
a['张三']    ['35', '170']
a['张三'][0]     '35'

查到的值在进行比大小就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 09:11:22 | 显示全部楼层
a = [{'姓名': '张三', '年龄': 35, '身高': 170}, {'姓名': '李四', '年龄': 32, '身高': 160}, {'姓名': '王五', '年龄': 28, '身高': 180}]
b=[a[i]['身高'] for i in range(len(a)) if a[i]['年龄']>30]
print(b)
写个循环比较就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-9 09:11:27 | 显示全部楼层
yhhpf 发表于 2020-9-9 08:44
搞三个列表,一个放姓名,一个放年龄,一个放身高。
循环年龄列表判断是否满足条件,满足则获取下标,并返 ...

三个列表取出来了,下面的怎么写?lilist1=[年龄],list2=[身高]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 09:15:13 | 显示全部楼层
你这个本身就有问题吧
{{姓名:张三,年龄:35,身高:170},{姓名:李四,年龄:32,身高:160},{姓名:王五,年龄:28,身高:180}}

这个数据本身就有问题,看上去像是大字典里面套小字典,但是外层根本就不是字典啊,外层是个列表吧?列表应该用中括号,如下:
[{"姓名":"张三","年龄":35,"身高":170},{"姓名":"李四","年龄":32,"身高":160},{"姓名":"王五","年龄":28,"身高":180}]
list1=[{"姓名":"张三","年龄":35,"身高":170},{"姓名":"李四","年龄":32,"身高":160},{"姓名":"王五","年龄":28,"身高":180}]
heigh=[]
for people in list1:
    if people['年龄']>30:
        heigh.append(people['身高'])

print(heigh)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 09:26:58 | 显示全部楼层
list1=[{'姓名':'张三','年龄':35,'身高':170},{'姓名':'李四','年龄':32,'身高':160},{'姓名':'王五','年龄':28,'身高':180}]
list2=[]
for each in list1:
    if each['年龄']>30:
        list2.append(each['身高'])

print(list2)

还有字典里是不能放字典的,因为字典是可变的(不可哈希),字典里不能放可变的键和值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-9 09:29:50 | 显示全部楼层
sunrise085 发表于 2020-9-9 09:15
你这个本身就有问题吧

这个数据本身就有问题,看上去像是大字典里面套小字典,但是外层根本就不是字典啊 ...

这是一个变化的表,也就是几个json 数据类型,每次获取的姓名年龄身高都不同, 函数如何去写呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 09:32:20 | 显示全部楼层
lanyacp 发表于 2020-9-9 09:29
这是一个变化的表,也就是几个json 数据类型,每次获取的姓名年龄身高都不同, 函数如何去写呢?

直接把那几行放在函数里面就行了
def find_heigh(list1):
    heigh=[]
    for people in list1:
        if people['年龄']>30:
            heigh.append(people['身高'])
    return heigh

list1=[{"姓名":"张三","年龄":35,"身高":170},{"姓名":"李四","年龄":32,"身高":160},{"姓名":"王五","年龄":28,"身高":180}]
print(find_heigh(list1))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-9 09:35:50 | 显示全部楼层
sunrise085 发表于 2020-9-9 09:32
直接把那几行放在函数里面就行了

如果年龄是一个百分数,可以去直接这样比较吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 09:38:16 | 显示全部楼层
lanyacp 发表于 2020-9-9 09:35
如果年龄是一个百分数,可以去直接这样比较吗?

python中没有百分数,只有小数和字符串
不知道你所谓的百分数是什么鬼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-9 09:46:51 | 显示全部楼层
我开始想的简单力,遗漏了百分数这个麻烦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-9 09:53:26 | 显示全部楼层
sunrise085 发表于 2020-9-9 09:32
直接把那几行放在函数里面就行了

如果年龄对应结果是一个百分数,怎么去比较呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 10:17:00 | 显示全部楼层
定义一个一维指针数组:
char score[][6] = {'姓名','性别','年龄','身高','职业','联系电话'};    //定义数组,存放资料

定义一个搜索函数
void *search(void(*pointer)[6]);    //函数声明

用循环将资料补齐
for (i = 0;i < N;i++)
{
    for (j = 0;j < 6;j++)
    {
        scanf("%s",*(pointer + i) + j);
    }
}

因为C语言允许一维指针数组不定长,所以,行数是可以不指定的,有多少联系人,那个 N 就是多少,最后,完善程序即可达到你的目的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-9 10:24:03 | 显示全部楼层
风过无痕1989 发表于 2020-9-9 10:17
定义一个一维指针数组:
char score[][6] = {'姓名','性别','年龄','身高','职业','联系电话'};    //定义 ...

我用的python.....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 10:29:19 | 显示全部楼层

那是我看错了,从论坛那里看到新的问题,没有注意是哪个板块,sorry !
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 10:49:17 | 显示全部楼层
lanyacp 发表于 2020-9-9 09:53
如果年龄对应结果是一个百分数,怎么去比较呢?


你先把你的数据整理好。
还是那句话,python中没有百分数,你这个到底是小数还是字符串?
你看你的数据
1、姓名、张三、结果、身高这些都是字符串,但是为什么没有引号?
2、中文冒号是什么鬼?
3、最外层的大括号又是什么鬼?
4、这个35%、32%、28%,到底是什么形式的数据?是0.35、0.32、0.28,还是"35%"、"32%"、"28%"?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 10:59:02 | 显示全部楼层    本楼为最佳答案   
下面程序第四行,帮你解释一下。
people['结果']这个是取出字典中key为'结果'的值,即'35%',然后再去掉该字符串的最后一位% ,people['结果'][:-1],得到"35",再用int()将之转为数字,最后和30进行比较
def find_heigh(list1):
    heigh=[]
    for people in list1:
        if int(people['结果'][:-1])>30:
            heigh.append(people['身高'])
    return heigh

list1=[{"姓名":"张三","结果":"35%","身高":170},{"姓名":"李四","结果":"32%","身高":160},{"姓名":"王五","结果":"28%","身高":180}]
print(find_heigh(list1))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-9 14:54:42 | 显示全部楼层
lanyacp 发表于 2020-9-9 09:11
三个列表取出来了,下面的怎么写?lilist1=[年龄],list2=[身高]

name = ['张三','李四','王五']
result = ['35%','32%','29.9%']
height = [170,160,180]
#姓名、年龄、身高按顺序对应
height_list = []
for each in result:
    if float(each[:-1]) >= 30 :
        height_list.append(height[result.index(each)])
print(height_list)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 18:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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