Hướng dẫn can dictionaries have multiple data types python? - từ điển có thể có nhiều loại dữ liệu python?

Bạn nói rằng bạn có một từ điển với nhiều loại chính. Trong Python, nó không quan trọng loại khóa nào miễn là chúng có thể băm. Có nghĩa là những điều sau đây là hoàn toàn chấp nhận được:

my_dict={}    
my_dict[1]=[1,2,3]    
my_dict['s']='hello'    
my_dict[[0,2]]={'a':1,2:'b'}
print[my_dict]
{1: [1, 2, 3], 
's': 'hello', 
[0, 2]: {'a': 1, 2: 'b'}
}

Tuy nhiên, bạn nói rằng các khóa của bạn là danh sách các giá trị khác. Bởi vì một danh sách là có thể thay đổi, nó không thể được sử dụng làm chìa khóa trong một dict:

my_dict[[1,2]]='coords'
TypeError: unhashable type: 'list'

Giải pháp sẽ là chuyển đổi các khóa danh sách của bạn thành các khóa tuple, như trong ví dụ thứ 3 của tôi ở trên, có cấu trúc tương tự nhưng không thể thay đổi

Hầu như bất kỳ loại giá trị nào cũng có thể được sử dụng làm khóa từ điển trong Python. Bạn thậm chí có thể sử dụng các đối tượng tích hợp như các loại và chức năng. Tuy nhiên, có một vài hạn chế rằng các khóa từ điển phải tuân thủ.

Đầu tiên, một khóa nhất định chỉ có thể xuất hiện trong một từ điển một lần. Các khóa trùng lặp không được phép. Một từ điển ánh xạ từng khóa theo giá trị tương ứng, do đó, nó không có ý nghĩa gì khi ánh xạ một khóa cụ thể hơn một lần. Nếu bạn chỉ định khóa lần thứ hai trong quá trình tạo từ điển ban đầu, thì lần xuất hiện thứ hai sẽ ghi đè lên thứ nhất.

Thứ hai, một khóa từ điển phải thuộc loại bất biến. Ví dụ: bạn có thể sử dụng số nguyên, phao, chuỗi hoặc boolean làm khóa từ điển. Tuy nhiên, cả danh sách và từ điển khác đều không thể đóng vai trò là khóa từ điển, bởi vì danh sách và từ điển đều có thể thay đổi. Mặt khác, các giá trị có thể là bất kỳ loại nào và có thể được sử dụng nhiều lần.

Ảnh của Waldemar Brandt trên unplash

Có một cái nhìn nhanh về ba loại dữ liệu từ điển phổ biến trong Python.

Từ điển là một cấu trúc dữ liệu thiết yếu trong Python và bất kỳ ngôn ngữ lập trình hiện đại nào khác, chẳng hạn như JavaScript và Swift. Chúng còn được gọi là bản đồ, băm, bảng băm và các mảng kết hợp. Mặc dù các tên khác nhau, chúng có chung cùng một tính năng-các yếu tố của chúng là các cặp giá trị chính. Nói một cách đơn giản, một từ điển bao gồm một hoặc nhiều mục và chúng ta có thể sử dụng các khóa duy nhất để xác định từng yếu tố này. Sử dụng một khóa cụ thể, chúng tôi sẽ có thể tìm thấy giá trị được liên kết với khóa đó.

Nếu bạn đã từng học Python, có lẽ bạn đã biết rằng dict là một trong những loại dữ liệu tích hợp được sử dụng phổ biến nhất. Nó là viết tắt của từ điển, nhưng bạn có biết rằng có các loại dữ liệu từ điển khác trong Python không? Hãy cùng tìm hiểu những gì họ là trong bài viết này. Chúng tôi cũng sẽ bao gồm các cách sử dụng cơ bản của riêng họ.

Các dict-in-in

Kiểu dữ liệu dict là cấu trúc dữ liệu ánh xạ tích hợp duy nhất như là một phần của thư viện tiêu chuẩn Python. Việc sử dụng chính của nó rất đơn giản, như được tóm tắt dưới đây.

Cách sử dụng cơ bản của dict

Một số điểm cần thiết được liệt kê dưới đây liên quan đến việc sử dụng phổ biến của kiểu dữ liệu dict.

  • Các chìa khóa cần phải được băm. Một đối tượng có thể băm nếu loại của nó thực hiện phương thức
    my_dict[[1,2]]='coords'
    TypeError: unhashable type: 'list'
    
    2 sao cho giá trị băm có thể được tính toán cho từng đối tượng của loại. Điều quan trọng, các đối tượng có thể băm không bao giờ nên thay đổi trong vòng đời của chúng, điều đó có nghĩa là các vật thể có thể thay đổi như
    my_dict[[1,2]]='coords'
    TypeError: unhashable type: 'list'
    
    3 và dict không thể băm và do đó có thể được sử dụng làm khóa, như hình dưới đây.
>>> dict_example = {1: 1, 'three': 3, [4, 5]: 0}
>>> dict_example[[1,2]] = 5
Traceback [most recent call last]:
File "", line 1, in
TypeError: unhashable type: 'list'
  • Nếu chúng ta truy cập một giá trị bằng phương pháp khung vuông [nghĩa là,
    my_dict[[1,2]]='coords'
    TypeError: unhashable type: 'list'
    
    5], trình thông dịch sẽ tăng
    my_dict[[1,2]]='coords'
    TypeError: unhashable type: 'list'
    
    6 nếu khóa không có trong dict. Do đó, một cách an toàn hơn để truy cập một giá trị khóa cụ thể là sử dụng phương thức
    my_dict[[1,2]]='coords'
    TypeError: unhashable type: 'list'
    
    8. Khi khóa không tồn tại,
    my_dict[[1,2]]='coords'
    TypeError: unhashable type: 'list'
    
    9 sẽ được trả về trừ khi giá trị mặc định được đặt và trả về tương ứng.
>>> dict_missing = {'zero': 0, 'one': 1}
>>> dict_missing['two']
Traceback [most recent call last]:
File "", line 1, in
KeyError: 'two'
>>> print[dict_missing.get['two']]
None
>>> print[dict_missing.get['two', -1]]
-1
  • Chúng ta có thể sử dụng các phương thức
    >>> dict_example = {1: 1, 'three': 3, [4, 5]: 0}
    >>> dict_example[[1,2]] = 5
    Traceback [most recent call last]:
    File "", line 1, in
    TypeError: unhashable type: 'list'
    0,
    >>> dict_example = {1: 1, 'three': 3, [4, 5]: 0}
    >>> dict_example[[1,2]] = 5
    Traceback [most recent call last]:
    File "", line 1, in
    TypeError: unhashable type: 'list'
    1 và
    >>> dict_example = {1: 1, 'three': 3, [4, 5]: 0}
    >>> dict_example[[1,2]] = 5
    Traceback [most recent call last]:
    File "", line 1, in
    TypeError: unhashable type: 'list'
    2 để truy cập các khóa, giá trị và các cặp giá trị khóa ____ 9 [được hiển thị dưới dạng bộ dữ liệu], tương ứng. Chúng được biết đến là các đối tượng xem, điều đó có nghĩa là chúng chỉ là những quan điểm năng động của dict và chúng thay đổi khi dict thay đổi. Bên cạnh đó, những quan điểm này là lặp đi lặp lại để tất cả chúng có thể được sử dụng trong các vòng lặp.
>>> dict_iterable = {'zero': 0, 'one': 1}
>>> dict_iterable_keys = dict_iterable.keys[]
>>> dict_iterable_keys
dict_keys[['zero', 'one']]
>>> dict_iterable['two']=2
>>> dict_iterable_keys
dict_keys[['zero', 'one', 'two']]
>>> for i in dict_iterable_keys:
... print[i]
...
zero
one
two

DefaultDict

Là một lớp con của lớp dict tích hợp, một đối tượng

>>> dict_example = {1: 1, 'three': 3, [4, 5]: 0}
>>> dict_example[[1,2]] = 5
Traceback [most recent call last]:
File "", line 1, in
TypeError: unhashable type: 'list'
7 đôi khi được sử dụng làm đối tượng giống như từ điển. Cần lưu ý rằng kiểu dữ liệu
>>> dict_example = {1: 1, 'three': 3, [4, 5]: 0}
>>> dict_example[[1,2]] = 5
Traceback [most recent call last]:
File "", line 1, in
TypeError: unhashable type: 'list'
7 không phải là một phần của thư viện tiêu chuẩn và nó có sẵn trong mô -đun
>>> dict_example = {1: 1, 'three': 3, [4, 5]: 0}
>>> dict_example[[1,2]] = 5
Traceback [most recent call last]:
File "", line 1, in
TypeError: unhashable type: 'list'
9.

Loại

>>> dict_example = {1: 1, 'three': 3, [4, 5]: 0}
>>> dict_example[[1,2]] = 5
Traceback [most recent call last]:
File "", line 1, in
TypeError: unhashable type: 'list'
7 có cùng chức năng với lớp dict, ngoại trừ có thuộc tính
>>> dict_missing = {'zero': 0, 'one': 1}
>>> dict_missing['two']
Traceback [most recent call last]:
File "", line 1, in
KeyError: 'two'
>>> print[dict_missing.get['two']]
None
>>> print[dict_missing.get['two', -1]]
-1
2. Chất xây dựng ____ 27 là
>>> dict_missing = {'zero': 0, 'one': 1}
>>> dict_missing['two']
Traceback [most recent call last]:
File "", line 1, in
KeyError: 'two'
>>> print[dict_missing.get['two']]
None
>>> print[dict_missing.get['two', -1]]
-1
4. Cụ thể, giá trị mặc định của đối số
>>> dict_missing = {'zero': 0, 'one': 1}
>>> dict_missing['two']
Traceback [most recent call last]:
File "", line 1, in
KeyError: 'two'
>>> print[dict_missing.get['two']]
None
>>> print[dict_missing.get['two', -1]]
-1
2 là
my_dict[[1,2]]='coords'
TypeError: unhashable type: 'list'
9. Khi nó được thiết lập, nó được gọi là mà không có đối số để tạo giá trị mặc định khi một khóa nhất định không có mặt trong
>>> dict_example = {1: 1, 'three': 3, [4, 5]: 0}
>>> dict_example[[1,2]] = 5
Traceback [most recent call last]:
File "", line 1, in
TypeError: unhashable type: 'list'
7. Một ví dụ được đưa ra dưới đây.

>>> from collections import defaultdict
>>> letter_counts = defaultdict[int]
>>> for i in 'abbcccddddeeeee':
... letter_counts[i] += 1
...
>>> letter_counts.items[]
dict_items[[['a', 1], ['b', 2], ['c', 3], ['d', 4], ['e', 5]]]

Như được hiển thị ở trên, khi

>>> dict_missing = {'zero': 0, 'one': 1}
>>> dict_missing['two']
Traceback [most recent call last]:
File "", line 1, in
KeyError: 'two'
>>> print[dict_missing.get['two']]
None
>>> print[dict_missing.get['two', -1]]
-1
8 không có bất kỳ khóa nào, truy cập giá trị của khóa bị thiếu [ví dụ: 'A'],
>>> dict_missing = {'zero': 0, 'one': 1}
>>> dict_missing['two']
Traceback [most recent call last]:
File "", line 1, in
KeyError: 'two'
>>> print[dict_missing.get['two']]
None
>>> print[dict_missing.get['two', -1]]
-1
2 [tức là,
>>> dict_iterable = {'zero': 0, 'one': 1}
>>> dict_iterable_keys = dict_iterable.keys[]
>>> dict_iterable_keys
dict_keys[['zero', 'one']]
>>> dict_iterable['two']=2
>>> dict_iterable_keys
dict_keys[['zero', 'one', 'two']]
>>> for i in dict_iterable_keys:
... print[i]
...
zero
one
two
0] được gọi là 0 được trả về, vì
>>> dict_iterable = {'zero': 0, 'one': 1}
>>> dict_iterable_keys = dict_iterable.keys[]
>>> dict_iterable_keys
dict_keys[['zero', 'one']]
>>> dict_iterable['two']=2
>>> dict_iterable_keys
dict_keys[['zero', 'one', 'two']]
>>> for i in dict_iterable_keys:
... print[i]
...
zero
one
two
1 trả về 0. , tính năng nổi bật nhất của
>>> dict_example = {1: 1, 'three': 3, [4, 5]: 0}
>>> dict_example[[1,2]] = 5
Traceback [most recent call last]:
File "", line 1, in
TypeError: unhashable type: 'list'
7 là trả về các giá trị mặc định bằng cách gọi hàm
>>> dict_iterable = {'zero': 0, 'one': 1}
>>> dict_iterable_keys = dict_iterable.keys[]
>>> dict_iterable_keys
dict_keys[['zero', 'one']]
>>> dict_iterable['two']=2
>>> dict_iterable_keys
dict_keys[['zero', 'one', 'two']]
>>> for i in dict_iterable_keys:
... print[i]
...
zero
one
two
3 cho các khóa bị thiếu.to return default values by calling the
>>> dict_iterable = {'zero': 0, 'one': 1}
>>> dict_iterable_keys = dict_iterable.keys[]
>>> dict_iterable_keys
dict_keys[['zero', 'one']]
>>> dict_iterable['two']=2
>>> dict_iterable_keys
dict_keys[['zero', 'one', 'two']]
>>> for i in dict_iterable_keys:
... print[i]
...
zero
one
two
3 function for missing keys.

Một điều cần lưu ý rằng đối số

>>> dict_missing = {'zero': 0, 'one': 1}
>>> dict_missing['two']
Traceback [most recent call last]:
File "", line 1, in
KeyError: 'two'
>>> print[dict_missing.get['two']]
None
>>> print[dict_missing.get['two', -1]]
-1
2 chỉ có thể được đặt với một cái gì đó có thể gọi được, như một hàm hoặc một lambda. Vì vậy, ví dụ trên có thể được viết lại như dưới đây. Chúng tôi sử dụng hàm Lambda
>>> dict_iterable = {'zero': 0, 'one': 1}
>>> dict_iterable_keys = dict_iterable.keys[]
>>> dict_iterable_keys
dict_keys[['zero', 'one']]
>>> dict_iterable['two']=2
>>> dict_iterable_keys
dict_keys[['zero', 'one', 'two']]
>>> for i in dict_iterable_keys:
... print[i]
...
zero
one
two
5 để thay thế hàm
>>> dict_iterable = {'zero': 0, 'one': 1}
>>> dict_iterable_keys = dict_iterable.keys[]
>>> dict_iterable_keys
dict_keys[['zero', 'one']]
>>> dict_iterable['two']=2
>>> dict_iterable_keys
dict_keys[['zero', 'one', 'two']]
>>> for i in dict_iterable_keys:
... print[i]
...
zero
one
two
0.

>>> from collections import defaultdict
>>> letter_counts = defaultdict[lambda: 0]
>>> for i in 'abbcccddddeeeee':
... letter_counts[i] += 1
...
>>> letter_counts.items[]
dict_items[[['a', 1], ['b', 2], ['c', 3], ['d', 4], ['e', 5]]]

Các đơn đặt hàng

Một loại giống như từ điển hữu ích khác là

>>> dict_iterable = {'zero': 0, 'one': 1}
>>> dict_iterable_keys = dict_iterable.keys[]
>>> dict_iterable_keys
dict_keys[['zero', 'one']]
>>> dict_iterable['two']=2
>>> dict_iterable_keys
dict_keys[['zero', 'one', 'two']]
>>> for i in dict_iterable_keys:
... print[i]
...
zero
one
two
7, cũng có sẵn trong mô-đun
>>> dict_example = {1: 1, 'three': 3, [4, 5]: 0}
>>> dict_example[[1,2]] = 5
Traceback [most recent call last]:
File "", line 1, in
TypeError: unhashable type: 'list'
9 dưới dạng loại
>>> dict_example = {1: 1, 'three': 3, [4, 5]: 0}
>>> dict_example[[1,2]] = 5
Traceback [most recent call last]:
File "", line 1, in
TypeError: unhashable type: 'list'
7. Sự khác biệt chính giữa loại
>>> dict_iterable = {'zero': 0, 'one': 1}
>>> dict_iterable_keys = dict_iterable.keys[]
>>> dict_iterable_keys
dict_keys[['zero', 'one']]
>>> dict_iterable['two']=2
>>> dict_iterable_keys
dict_keys[['zero', 'one', 'two']]
>>> for i in dict_iterable_keys:
... print[i]
...
zero
one
two
7 và dict được sử dụng là trước đây nhớ thứ tự của các mục. Tuy nhiên, kể từ Python 3.7, loại dict cũng đã thực hiện thứ tự các cặp giá trị khóa dựa trên trình tự chèn của chúng, do đó sự khác biệt này về mặt theo dõi thứ tự đã biến mất. Bên cạnh đó, có hai điều đáng chú ý.

  • Họ thực hiện phương pháp
    >>> from collections import defaultdict
    >>> letter_counts = defaultdict[int]
    >>> for i in 'abbcccddddeeeee':
    ... letter_counts[i] += 1
    ...
    >>> letter_counts.items[]
    dict_items[[['a', 1], ['b', 2], ['c', 3], ['d', 4], ['e', 5]]]
    3 khác nhau. Trong dict [Python 3.7+], phương pháp này sẽ loại bỏ và trả về một cặp giá trị khóa bằng LIFO [tức là, cuối cùng theo thứ tự đầu tiên]. Tuy nhiên, trong
    >>> dict_iterable = {'zero': 0, 'one': 1}
    >>> dict_iterable_keys = dict_iterable.keys[]
    >>> dict_iterable_keys
    dict_keys[['zero', 'one']]
    >>> dict_iterable['two']=2
    >>> dict_iterable_keys
    dict_keys[['zero', 'one', 'two']]
    >>> for i in dict_iterable_keys:
    ... print[i]
    ...
    zero
    one
    two
    7, có một đối số Boolean cuối cùng mà chúng ta có thể đặt ra. Khi đó là sự thật, cặp giá trị khóa được xóa và trả về sẽ là thứ tự LIFO, khi nó sai, thứ tự sẽ là FIFO [tức là, trước tiên] Chúng tôi muốn sử dụng để loại bỏ các mục. Các ví dụ thích hợp được đưa ra dưới đây.
>>> from collections import OrderedDict
>>> dict_remove = {0: 'zero', 1: 'one', 2: 'two'}
>>> dict_remove.popitem[]
[2, 'two']
>>> ordereddict_remove = OrderedDict[{0: 'zero', 1: 'one', 2: 'two'}]
>>> ordereddict_remove.popitem[last=False]
[0, 'zero']
>>> ordereddict_remove.popitem[last=True]
[2, 'two']
  • Họ thực hiện thử nghiệm bình đẳng khác nhau. Khi chúng tôi so sánh hai
    >>> dict_iterable = {'zero': 0, 'one': 1}
    >>> dict_iterable_keys = dict_iterable.keys[]
    >>> dict_iterable_keys
    dict_keys[['zero', 'one']]
    >>> dict_iterable['two']=2
    >>> dict_iterable_keys
    dict_keys[['zero', 'one', 'two']]
    >>> for i in dict_iterable_keys:
    ... print[i]
    ...
    zero
    one
    two
    7, thứ tự của các mục quan trọng. Tuy nhiên, khi chúng tôi so sánh với dict, thứ tự của các mặt hàng không quan trọng. Ngoài các so sánh trong các loại dữ liệu tương ứng của chúng, thứ tự không quan trọng khi chúng ta so sánh
    >>> dict_iterable = {'zero': 0, 'one': 1}
    >>> dict_iterable_keys = dict_iterable.keys[]
    >>> dict_iterable_keys
    dict_keys[['zero', 'one']]
    >>> dict_iterable['two']=2
    >>> dict_iterable_keys
    dict_keys[['zero', 'one', 'two']]
    >>> for i in dict_iterable_keys:
    ... print[i]
    ...
    zero
    one
    two
    7 với dict. Dưới đây là một số ví dụ.
>>> ordereddict0 = OrderedDict[{0: 0, 1: 1}]
>>> ordereddict1 = OrderedDict[{1: 1, 0: 0}]
>>> ordereddict2 = OrderedDict[{0: 0, 1: 1}]
>>> dict0 = {0: 0, 1: 1}
>>> dict1 = {1: 1, 0: 0}
>>> ordereddict0 == ordereddict1
False
>>> ordereddict0 == ordereddict2
True
>>> dict0 == dict1
True
>>> ordereddict0 == dict0
True
>>> ordereddict0 == dict1
True

Takeaways

Trong bài viết này, chúng tôi đã học được ba từ điển được sử dụng phổ biến nhất trong Python. Khi nào chúng ta biết sử dụng cái nào? Dưới đây là một số hướng dẫn chung.

  • Trong hầu hết các trường hợp, chúng ta có thể sử dụng kiểu dữ liệu dict tích hợp. Không chỉ bởi vì nó cung cấp nhiều chức năng nhất cho nhu cầu của chúng tôi, mà còn bởi vì nó không yêu cầu nhập bất kỳ mô -đun nào.
  • Khi chúng ta xây dựng một từ điển, nếu chúng ta biết giá trị mặc định nào, chúng ta nên đặt cho một khóa bị thiếu, chúng ta nên xem xét sử dụng kiểu dữ liệu
    >>> dict_example = {1: 1, 'three': 3, [4, 5]: 0}
    >>> dict_example[[1,2]] = 5
    Traceback [most recent call last]:
    File "", line 1, in
    TypeError: unhashable type: 'list'
    7, vì nó được tối ưu hóa cho việc sử dụng này.
  • Nhìn chung,
    >>> dict_iterable = {'zero': 0, 'one': 1}
    >>> dict_iterable_keys = dict_iterable.keys[]
    >>> dict_iterable_keys
    dict_keys[['zero', 'one']]
    >>> dict_iterable['two']=2
    >>> dict_iterable_keys
    dict_keys[['zero', 'one', 'two']]
    >>> for i in dict_iterable_keys:
    ... print[i]
    ...
    zero
    one
    two
    7 và dict có các cách sử dụng tương tự, vì vậy chúng ta có thể sử dụng chúng thay thế cho nhau trừ khi thứ tự của các từ điển được quan tâm khi chúng ta chạy thử nghiệm bình đẳng.

Cảm ơn bạn đã đọc bài viết này.

Từ điển có thể có nhiều loại dữ liệu Python không?

Ví dụ: bạn có thể sử dụng số nguyên, phao, chuỗi hoặc boolean làm khóa từ điển. Tuy nhiên, cả danh sách và từ điển khác đều không thể đóng vai trò là khóa từ điển, bởi vì danh sách và từ điển đều có thể thay đổi. Mặt khác, các giá trị có thể là bất kỳ loại nào và có thể được sử dụng nhiều lần.lists and dictionaries are mutable. Values, on the other hand, can be any type and can be used more than once.

Từ điển có thể có nhiều loại dữ liệu?

Người ta chỉ có thể đặt một loại đối tượng vào từ điển.Nếu một người muốn đặt nhiều loại dữ liệu vào cùng một từ điển, ví dụ:Đối với thông tin cấu hình hoặc các cửa hàng dữ liệu phổ biến khác, siêu lớp của tất cả các loại dữ liệu được giữ có thể được sử dụng để xác định từ điển.. If one wants to put a variety of types of data into the same dictionary, e.g. for configuration information or other common data stores, the superclass of all possible held data types must be used to define the dictionary.

Từ điển có thể lưu trữ các loại dữ liệu khác nhau trong Python không?

Các chìa khóa là bất biến.Giống như danh sách, các giá trị của từ điển có thể chứa dữ liệu không đồng nhất, tức là, số nguyên, phao, chuỗi, nan, booleans, danh sách, mảng và thậm chí từ điển lồng nhau.Bài viết này sẽ cung cấp cho bạn một sự hiểu biết rõ ràng và cho phép bạn làm việc thành thạo với từ điển Python.the values of dictionaries can hold heterogeneous data i.e., integers, floats, strings, NaN, Booleans, lists, arrays, and even nested dictionaries. This article will provide you a clear understanding and enable you to work proficiently with Python dictionaries.

Các khóa từ điển Python có thể là các loại dữ liệu khác nhau không?

Các phím từ điển phải thuộc loại bất biến.Chuỗi và số là hai loại dữ liệu được sử dụng phổ biến nhất làm khóa từ điển.Chúng ta cũng có thể sử dụng các bộ dữ liệu làm khóa nhưng chúng phải chỉ chứa chuỗi, số nguyên hoặc các bộ dữ liệu khác.. Strings and numbers are the two most commonly used data types as dictionary keys. We can also use tuples as keys but they must contain only strings, integers, or other tuples.

Bài Viết Liên Quan

Chủ Đề