53_使用`zip()` 函数 并行迭代循环_内置数据类型转换_list to tuple_ dict to list _dict to tuple


53.使用zip()并行迭代循环

我们可以通过zip()函数对多个序列进行并行迭代,zip()函数在最短序列“用完”时就会停止。

【操作】测试 zip()并行迭代



    
    
# 代码1
names = ("onepis", "lufei", "suolong", "baiz")
ages = (18, 16, 20, 25)
jobs = ("老师", "程序员", "公务员")

# zip并行  代码2
for name, age, job in zip(names, ages, jobs):
    print("{0}--{1}--{2}".format(name, age, job))


# 运行结果   
onepis--18--老师
lufei--16--程序员
suolong--20--公务员

#######################

# 代码2  普通的不用zip的方法
for i in [1, 2, 3]:
    print(i)
    
# 代码2 正常 方法
for i in range(3):
    print("{0}--{1}--{2}".format(names[i], ages[i], jobs[i])) # 只能一个 一个迭代。
# zip 相当于 把 3 个 列表中 的  每一个元素 提出来 放在一起。
# 比如 (name[0]),ages[0],job[0]) 一个一个元组。 
# zip 返回的是一个生成器。 可迭代对象。  

# ----------------------------
# 关于 zip 的一些 基本测试
# 打包 之后  如何 恢复 原来的列表形式呢?
In [11]: y=[2,4,6,8,10]

In [12]: x=[1,3,5,7,9]

In [13]: z=zip(x,y)

In [14]: list(z)
Out[14]: [(1, 2), (3, 4), (5, 6), (7, 8), (9, 10)]

In [15]: z
Out[15]: <zip at 0x52f27d8>

In [16]: z=zip(x,y)

In [17]: zz=zip(*z) 
# 原先 打包的对象 现在 * 解包之后  再次 zip 就 恢复了 原样

In [18]: zz
Out[18]: <zip at 0x5232be8>

In [19]: *zz, # 看这里 
# 当然 你也可以 list(zz) 然后  索引 访问 0  1 位置 。 就和原来一模一样了
Out[19]: ((1, 3, 5, 7, 9), (2, 4, 6, 8, 10))

关于一些类型转换

字典与元组相互转换

p = {'a':1, 'b':22, 'c':3}
zip(p.keys(), p.values)  # [('a', 1), ('c', 3), ('b', 22)]

ls = [('a', 1), ('c', 3), ('b', 22)]
dict(ls)   #  {'a':1, 'b':22, 'c':3}

元组与列表互相转换

# list转换为tuple:
list1=[1,2,3]

tupl=tuple(list1)

-----

# tuple转换为list:

list(tupl)

列表和字典之间互相转换

使用 zip 函数 打包列表。

names = ("onepis", "lufei", "suolong", "baiz")
ages = (18, 16, 20, 25)
jobs = ("老师", "程序员", "公务员")
dict(zip(names,jobs))

运行效果
In [29]: names = ("onepis", "lufei", "suolong", "baiz")
    ...: ages = (18, 16, 20, 25)
    ...: jobs = ("老师", "程序员", "公务员")
    ...: dict(zip(names,jobs)) # dict 只接受 两个。 如果多个参数 会 报错 ValueError
Out[29]: {'onepis': '老师', 'lufei': '程序员', 'suolong': '公务员'}

嵌套的列表或者元组

In [32]: dict([["onepis","programmer"],["lufei","worker"]])
Out[32]: {'onepis': 'programmer', 'lufei': 'worker'}

字典转为列表

dic={'onepis': '老师', 'lufei': '程序员', 'suolong': '公务员'}
# 将字典的key 转换为 列表。
lst=list(dic)
print(lst)  # ['onepis', 'lufei', 'suolong']

lst2=list(dic.values())
print(lst2) # 将值转换为 列表
# ['老师', '程序员', '公务员']


# 还有就是 item
In [36]: [*dic.items()] # 利用前面我讲过的 *  解包 也可以的
Out[36]: [('onepis', '老师'), ('lufei', '程序员'), ('suolong', '公务员')]

# 记住 我前面 讲过的几个常用 方法
# keys  values items
# get 这都是关于字典 常用的。

字符串转换字典

json 模块

# 对于 是 这种 json  写法的  字符串
# 可以直接 使用 json 模块 的 loads 来转换
# 但是 json 字符串里面  不能使用 单引号。 
# 容易报错。
In [43]: import json

In [44]: s = '{"name": "onpis"}'

In [45]: s
Out[45]: '{"name": "onpis"}'

In [46]: json.loads(s)
Out[46]: {'name': 'onpis'}


使用 eval 函数

eval本质上是 运行 字符串的表达式
这两种方法都有局限性。

In [44]: s = '{"name": "onpis"}'
In [47]: eval(s)
Out[47]: {'name': 'onpis'}

In [48]: s
Out[48]: '{"name": "onpis"}'

# 但是eval 不安全 所以我们还有一个 安全的 eval 
# 当然 安全与否 是看我们 用户能接触到的 绝对不能使用 eval 函数。
In [39]: from ast import literal_eval

In [40]: x="2+3"

In [41]: y='{"name":"onepis"}'

In [42]: z="c=3" # 这种会报错。语法错误。
# eval 和 literal_eval 都不允许 赋值

In [43]: literal_eval(x)
Out[43]: 5

In [44]: literal_eval(y)
Out[44]: {'name': 'onepis'}


In [44]: literal_eval(y)
Out[44]: {'name': 'onepis'}

In [45]: literal_eval(z)
Traceback (most recent call last):
  File "<unknown>", line 1
    c=3
     ^
SyntaxError: invalid syntax

# 那我们怎么办 , 不允许 赋值
# 还有一个函数叫做 exec 

In [56]: exec("{'onepis':22}") # 仅仅只是执行 返回的是None
# 所以我们需要用一个变量取接收他
In [57]: exec("aa={'onepis':22}") # 可以赋值

In [58]: aa
Out[58]: {'onepis': 22}

exec - 内置函数-文档

直接用字符串 创建字典就可以了。

字典创建-点击链接跳转


单引号字符转双引号

利用 json 字符串 不支持 双引号的 特性 进行转换

默认打印出来的 都是 单引号 字符。

In [221]: import faker

In [222]: fake=faker.Faker(['zh_CN'])

In [223]: colors=[fake.color() for i in range(30)]

In [224]: colors[0:3]
Out[224]: ['#fce2bf', '#f7be6f', '#6c39a3']

In [225]: import json

In [226]: json.dumps(colors)
Out[226]: '["#fce2bf", "#f7be6f", "#6c39a3", "#74e0db", "#84ea75", "#bf161f", "#6775ce", "#edd47b", "#0fc10f", "#33bf7b", "#5902cc", "#e8be17", "#dd119d", "#e2e253", "#db91f2", "#f5fca6", "#67ce37", "#67f7a3", "#d8bf2f", "#96f2d2", "#5fdef4", "#56dd85", "#efee8d", "#bc1436", "#d3d648", "#116d6d", "#e27c3d", "#f24b93", "#e57b86", "#ef2004"]'

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值