来自WeTab AI PRO

1.两个元素数量相同的元组,将其中一个元组的每个元素作为键,将另一个元组的每个元素作为值,生成字典

要根据两个元素数量相同的元组生成字典,其中一个元组的每个元素作为键,另一个元组的每个元素作为值,你可以使用 Python 的zip 函数来配对这两个元组的元素,然后使用字典推导式来生成字典。下面是具体的操作方法:

# 定义两个元组
keys = (1, 2, 3)
values = ('a', 'b', 'c')

# 使用 zip 函数将键和值配对,然后通过字典推导式创建字典
dictionary = {key: value for key, value in zip(keys, values)}

print(dictionary)  # 输出: {1: 'a', 2: 'b', 3: 'c'}

2. 将一个元组的每个元素作为键,每个键的初始值相同,生成字典

dict1 = dict.fromkeys(('a', 'b', 'c'), 100)
print(dict1)   # 输出:{'a': 100, 'b': 100, 'c': 100}

3.把变量作为键值

a = 0
dict1 = {a: 'zero', 1: 'one', 2: 'two', 3: 'three'}
print(dict1[a], dict1[0])  # 输出:zero
a = 1
print(dict1[a], dict1[1])  # 输出:one
a = 2
print(dict1[a], dict1[2])  # 输出:two
a = 3
print(dict1[a], dict1[3])  # 输出:three

4.最常见的是字符串和数值作为键和值,但是更多奇怪的东西都可以作为键和值

. 可以将数字、字符、元组甚至变量作为键

在Python中,字典的键可以是任何不可变(immutable)类型的数据,例如整数、浮点数、字符串、元组等。变量本身只是一个标识符,它指向某个内存中的对象。因此,当你使用一个变量作为字典的键时,实际上你是在使用该变量指向的对象作为键。

如果变量指向的对象是不可变的,那么可以用作字典的键。例如,如果变量指向一个整数或字符串,那么这个变量可以作为字典的键。但如果变量指向的是一个可变对象,如列表或字典,那么这个变量就不能直接用作字典的键。如果确实需要使用可变对象作为键,可以考虑将其转换为不可变类型,如将列表转换为元组。这样,元组就可以作为字典的键使用。

dict1 = {100.0: float, (1, 2, 3): [4, 5, 6]}
a = 90.0 + 10.0
print(dict1[a])  # 输出:<class 'float'>
print(dict1[(1, 2, 3)])  # 输出:[4, 5, 6]

.使用数值作为键值的时候还要注意python的弱类型风险。

dict1 = {100.0: float, 100: int, 99+1: "AAA"}
print(dict1[100.0])  # 输出:AAA

 python的数据比较机制,100.0与100以及99+1比较是相等的,所以这里并没有输出预期的<class 'float'>,而是指向了最后一个相符的项,这里就违反了字典的键必须是唯一值的原则。python是弱类型的语言,这个正是它的风险所在。

.使用函数作为键和值传递可以创建更灵活的字典

通常的字典的键和值都是提前确定的,尤其是键,要求必须是指向固定内容的内存区。然而,如果用函数作为键和值传递,就可以创建更加灵活的字典。

a = 100
b = 10.0
c = "abc"


def func(x):
    return x


dict1 = {func(100): func(150)}   # func1(100)是确定的,可以作为键,func1(150)作为值,也是确定的
print(dict1)     # 输出:{100: 150}
print(dict1[func(a)])   # 输出:150
dict2 = {func(a): func}   # func(a)是确定的,可以作为键。后面的func作为字典的值,只是指向了一个函数,它是不确定的
print(dict2)      # 输出:{100: <function func at 0x000001B88355D1F0>},可以看到字典的值是一个函数
print(dict2[100](b))   # 输出:10.0
print(dict2[a](c))   # 输出:abc

可以看出,通过将函数和变量设置为字典的键和值的方法,可以创建灵活的字典。我们可以注意到,无论键的形式如何变化,在创建字典之前,键的数据内容都必须固定下来,否则会报错。而字典的值就可以是一个不确定的内容。

05-15 14:22