Một đối tượng có thể là một giá trị trong từ điển Python không?

Thông thường, để truy cập các giá trị trong từ điển, tôi cần đảm bảo và tham khảo rất cụ thể tất cả các giá trị phù hợp không có lỗi chính tả. Nếu tôi muốn lấy giá trị được lưu trong khóa

my_obj.nested_value.n1
1, tôi cần gõ chính xác

my_dict['nested_value']['n1']

Vì hầu hết thời gian tôi làm việc trong Jupyter, nên tôi tận dụng lợi thế của việc hoàn thành và xem xét nội tâm để khám phá các thuộc tính và tránh lỗi chính tả. Từ điển Python không giúp ích nhiều cho việc này, nhưng các Đối tượng Python thì có. Điều này đặt ra một cách hợp lý câu hỏi, làm thế nào để tạo hệ thống phân cấp đối tượng lồng nhau để tôi có thể truy cập cùng một giá trị bằng cú pháp dấu chấm

my_dict.nested_value.n1

Mặc dù với các từ điển đơn giản, đây không phải là vấn đề lớn, nhưng khi làm việc với các phản hồi từ các điểm cuối REST, các thông báo JSON được trả về có thể rất lớn. Truy cập dễ dàng hơn vào tất cả các thuộc tính làm cho cuộc sống dễ dàng hơn rất nhiều. Khai báo đối tượng nhỏ sau đây có thể được sử dụng để chuyển đổi các từ điển được lồng sâu thành các đối tượng lồng nhau

class DictObj:
    def __init__[self, in_dict:dict]:
    	assert isinstance[in_dict, dict]
        for key, val in in_dict.items[]:
            if isinstance[val, [list, tuple]]:
               setattr[self, key, [DictObj[x] if isinstance[x, dict] else x for x in val]]
            else:
               setattr[self, key, DictObj[val] if isinstance[val, dict] else val]

Điều này giúp việc tìm hiểu các phản hồi JSON sâu từ các điểm cuối REST dễ dàng hơn rất nhiều. Bắt đầu đủ đơn giản, từ điển trên được chuyển đổi thành một đối tượng lồng nhau

my_obj = DictObt[my_dict]

Sau đó, việc truy cập các thuộc tính đơn giản như sử dụng cú pháp dấu chấm

my_obj.nested_value.n1

Vì đây là điều mà tôi thường xuyên gặp phải khi đào sâu vào JSON từ các phản hồi REST, nên tôi sẽ sử dụng Luồng thời gian thực của USGS làm ví dụ trong thế giới thực

import requests

url = '//waterservices.usgs.gov/nwis/iv/'
params = {
    'format': 'json',
    'sites': '12080010',
    'parameterCd': '00060',
    'siteStatus': 'all'
}

# retrieve the most recent real time streamflow observations
res = requests.get[url, params=params]

# convert the json body into a dictionary
res_json = res.json[]

# convert the json to a nested object
res_obj = DictObj[res_json]

# dig deep into the response to get the most recent [last in list] value
str_obs = res_obj.value.timeSeries[-1].values[-1].value[-1].value

# since stuck as a string, convert to an integer, and done!
int_obs = int[str_obs]

Thủ thuật nhỏ này đã giúp cuộc sống của tôi dễ dàng hơn rất nhiều khi xử lý JSON rối rắm quay trở lại từ các điểm cuối REST. Hy vọng rằng, nó cũng làm cho cuộc sống của bạn dễ dàng hơn một chút

Từ điển Python là một tập hợp các cặp khóa-giá trị. Một từ điển là một đối tượng của lớp dict. Đó là một bộ sưu tập không có thứ tự có nghĩa là trong khi lặp lại thứ tự truy xuất không được đảm bảo. Các khóa và giá trị từ điển có thể thuộc bất kỳ loại nào. Họ cũng có thể là

>>> my_dict = {1:"1", 2:"2"}
>>> del my_dict[1]
>>> print[my_dict]
{2: '2'}
>>> del my_dict
>>> print[my_dict]
Traceback [most recent call last]:
  File "", line 1, in 
NameError: name 'my_dict' is not defined
>>> 
0. Khóa và giá trị của nó được phân tách bằng dấu hai chấm. Các bản ghi từ điển được lập chỉ mục bằng cách sử dụng khóa

Mục từ điển Python

Các cặp khóa-giá trị còn được gọi là các mục hoặc thành phần của từ điển. Chúng ta có thể sử dụng dict. items[] để có thể lặp lại các mục trong từ điển. Không có hạn chế về giá trị của các mục từ điển

Khóa từ điển Python

Các phím là duy nhất trong từ điển. Nó được sử dụng để lấy các bản ghi từ từ điển. Một từ điển được tạo bằng cách sử dụng một cặp dấu ngoặc nhọn. Các cặp khóa-giá trị được phân tách bằng dấu phẩy

Khóa từ điển phải là bất biến. Vì vậy, chúng tôi có thể sử dụng chuỗi, số và bộ dữ liệu làm khóa chính tả. Nếu bộ chứa bất kỳ đối tượng có thể thay đổi nào, chúng tôi không thể sử dụng nó làm khóa từ điển

Chúng tôi có thể sử dụng Danh sách làm Khóa từ điển không?

Chúng tôi không thể sử dụng Danh sách làm khóa từ điển vì nó có thể được sửa đổi. Nếu chúng ta cố gắng sử dụng một danh sách làm khóa, nó sẽ đưa ra “TypeError. loại không thể xóa. danh sách"

Tạo từ điển

Các mục từ điển được phân tách bằng dấu phẩy và cặp khóa-giá trị được phân tách bằng dấu hai chấm. Các dấu ngoặc nhọn được sử dụng để xác định từ điển với tất cả các mục. Hãy xem một ví dụ đơn giản để tạo một từ điển và in nó

>>> fruits_dict = {"1": "Apple", "2": "Banana", 3: "Orange", None: "NA"}
>>> print[fruits_dict]
{'1': 'Apple', '2': 'Banana', 3: 'Orange', None: 'NA'}
>>> type[fruits_dict]

Lưu ý rằng loại của lớp từ điển là

>>> my_dict = {1:"1", 2:"2"}
>>> del my_dict[1]
>>> print[my_dict]
{2: '2'}
>>> del my_dict
>>> print[my_dict]
Traceback [most recent call last]:
  File "", line 1, in 
NameError: name 'my_dict' is not defined
>>> 
1 và các khóa-giá trị cũng thuộc các loại khác nhau

Tạo từ điển

Truy cập các giá trị từ điển

Chúng ta có thể truy cập một giá trị từ điển bằng cách sử dụng tên khóa trong ngoặc vuông

>>> fruits_dict["1"]
'Apple'
>>> fruits_dict["2"]
'Banana'
>>> fruits_dict[3]
'Orange'
>>> fruits_dict[None]
'NA'

Truy cập các giá trị từ điển

Nếu khóa không tồn tại, cách này để truy cập phần tử từ điển sẽ làm tăng KeyError. Tốt hơn là sử dụng phương thức

>>> my_dict = {1:"1", 2:"2"}
>>> del my_dict[1]
>>> print[my_dict]
{2: '2'}
>>> del my_dict
>>> print[my_dict]
Traceback [most recent call last]:
  File "", line 1, in 
NameError: name 'my_dict' is not defined
>>> 
2 trả về
>>> my_dict = {1:"1", 2:"2"}
>>> del my_dict[1]
>>> print[my_dict]
{2: '2'}
>>> del my_dict
>>> print[my_dict]
Traceback [most recent call last]:
  File "", line 1, in 
NameError: name 'my_dict' is not defined
>>> 
0 nếu không có khóa

Thêm/Cập nhật giá trị từ điển

Chúng ta có thể thêm hoặc cập nhật các phần tử từ điển bằng toán tử gán. Nếu khóa không tồn tại trong từ điển, cặp khóa-giá trị sẽ được thêm vào từ điển. Nếu không, giá trị được cập nhật với giá trị mới

my_dict.nested_value.n1
2

Thêm mục từ điển cập nhật

Xóa các mục từ điển

Chúng ta có thể sử dụng từ khóa del để xóa cặp khóa-giá trị từ điển. Nếu chúng ta sử dụng từ khóa del với từ điển thì toàn bộ từ điển sẽ bị xóa, khác với việc xóa tất cả các thành phần của từ điển

>>> my_dict = {1:"1", 2:"2"}
>>> del my_dict[1]
>>> print[my_dict]
{2: '2'}
>>> del my_dict
>>> print[my_dict]
Traceback [most recent call last]:
  File "", line 1, in 
NameError: name 'my_dict' is not defined
>>> 

Lặp lại từ điển bằng vòng lặp for

Chúng ta có thể lặp qua từ điển bằng vòng lặp for. Có nhiều cách sử dụng vòng lặp for với từ điển

1. Mục từ điển [] chức năng

Hàm items[] trả về một đối tượng dict_items, có thể lặp lại. Chúng ta có thể sử dụng nó với vòng lặp for và giải nén các phần tử của nó thành khóa và giá trị, sau đó sử dụng chúng bên trong vòng lặp for

my_dict.nested_value.n1
4

đầu ra

my_dict.nested_value.n1
5

2. Lặp qua các phím từ điển

Nếu chúng ta sử dụng đối tượng từ điển trong vòng lặp for, nó sẽ trả về từng khóa một. Vì từ điển không có thứ tự nên các khóa được trả về có thể theo bất kỳ thứ tự nào

my_dict.nested_value.n1
6

đầu ra

my_dict.nested_value.n1
7

3. Các giá trị từ điển Python[]

Chúng ta có thể sử dụng hàm values[] để lấy các giá trị từ điển và sau đó lặp lại chúng. Hàm values[] trả về một đối tượng dict_values, là danh sách các giá trị trong dict

my_dict.nested_value.n1
8

đầu ra

my_dict.nested_value.n1
9

Kiểm tra xem khóa có tồn tại trong Từ điển không

Chúng ta có thể sử dụng từ khóa “in” để kiểm tra xem từ khóa có tồn tại trong từ điển hay không. Tương tự chúng ta có thể dùng từ khóa “not in” để kiểm tra xem có thiếu key hay không

>>> fruits_dict["1"]
'Apple'
>>> fruits_dict["2"]
'Banana'
>>> fruits_dict[3]
'Orange'
>>> fruits_dict[None]
'NA'
0

Độ dài của từ điển

Chúng ta có thể sử dụng hàm len[] để tìm ra độ dài hoặc kích thước của từ điển

>>> fruits_dict["1"]
'Apple'
>>> fruits_dict["2"]
'Banana'
>>> fruits_dict[3]
'Orange'
>>> fruits_dict[None]
'NA'
1

Trình xây dựng dict[] của Python

Chúng ta có thể sử dụng hàm tạo dict[] tích hợp để tạo một đối tượng từ điển

>>> fruits_dict["1"]
'Apple'
>>> fruits_dict["2"]
'Banana'
>>> fruits_dict[3]
'Orange'
>>> fruits_dict[None]
'NA'
2

Phương pháp từ điển Python

Lớp dict Python có nhiều phương thức. Hãy xem xét một số phương thức quan trọng của lớp dict

1. giá trị[]

Phương thức này trả về một đối tượng chứa các giá trị từ từ điển. Loại đối tượng được trả về là 'dict_values' và chúng ta có thể lặp lại nó để thực hiện một số thao tác trên các giá trị từ điển

>>> fruits_dict["1"]
'Apple'
>>> fruits_dict["2"]
'Banana'
>>> fruits_dict[3]
'Orange'
>>> fruits_dict[None]
'NA'
3

2. mặt hàng[]

Phương pháp này cung cấp chế độ xem giống như tập hợp các mục Từ điển. Nó chủ yếu được sử dụng để giải nén các cặp khóa-giá trị từ điển thành các giá trị khác nhau và sau đó lặp lại chúng

>>> fruits_dict["1"]
'Apple'
>>> fruits_dict["2"]
'Banana'
>>> fruits_dict[3]
'Orange'
>>> fruits_dict[None]
'NA'
4

đầu ra

>>> fruits_dict["1"]
'Apple'
>>> fruits_dict["2"]
'Banana'
>>> fruits_dict[3]
'Orange'
>>> fruits_dict[None]
'NA'
5

3. pop[key[,default]]

Phương thức này xóa khóa đã chỉ định khỏi từ điển và trả về giá trị tương ứng. Nếu không tìm thấy khóa, giá trị mặc định tùy chọn được trả về. Nếu không tìm thấy khóa và giá trị mặc định không được cung cấp, KeyError sẽ được nâng lên

>>> fruits_dict["1"]
'Apple'
>>> fruits_dict["2"]
'Banana'
>>> fruits_dict[3]
'Orange'
>>> fruits_dict[None]
'NA'
6

Chúng tôi đang sử dụng khối thử ngoại trừ để bắt lỗi KeyError và in thông báo lỗi

4. sao chép[]

Hàm này trả về một bản sao nông của từ điển. Nếu đối tượng bên dưới có thể thay đổi và thay đổi, thì thay đổi đó cũng sẽ phản ánh trong lệnh được trả về bằng phương thức copy[]

>>> fruits_dict["1"]
'Apple'
>>> fruits_dict["2"]
'Banana'
>>> fruits_dict[3]
'Orange'
>>> fruits_dict[None]
'NA'
7

đầu ra

>>> fruits_dict["1"]
'Apple'
>>> fruits_dict["2"]
'Banana'
>>> fruits_dict[3]
'Orange'
>>> fruits_dict[None]
'NA'
8

5. xa lạ[]

Phương pháp này loại bỏ tất cả các mục từ từ điển. Nó tương tự như việc gán biến cho một từ điển trống

>>> fruits_dict["1"]
'Apple'
>>> fruits_dict["2"]
'Banana'
>>> fruits_dict[3]
'Orange'
>>> fruits_dict[None]
'NA'
9

6. fromKeys[có thể lặp lại, giá trị]

Phương thức tĩnh này tạo một từ điển mới với các khóa từ có thể lặp lại và các giá trị được đặt thành giá trị được cung cấp. Nếu giá trị không được cung cấp, các giá trị được đặt thành Không có

my_dict.nested_value.n1
20

đầu ra

my_dict.nested_value.n1
21

7. nhận [khóa [, mặc định]]

Phương thức này trả về giá trị cho khóa. Nếu không tìm thấy khóa, giá trị mặc định tùy chọn được trả về. Nếu không tìm thấy khóa và giá trị mặc định không được cung cấp, thì trả về Không có

my_dict.nested_value.n1
22

8. phím[]

Hàm này trả về danh sách các khóa trong đối tượng dict_keys. Chúng tôi có thể lặp lại danh sách này để xử lý các giá trị từ điển

my_dict.nested_value.n1
23

đầu ra

my_dict.nested_value.n1
24

9. popitem[]

Phương thức này loại bỏ và trả về một số mục từ điển dưới dạng bộ khóa-giá trị. Nếu từ điển trống, KeyError được nâng lên. Chúng ta có thể sử dụng chức năng này với vòng lặp while để xử lý các mục từ điển theo thứ tự ngẫu nhiên

my_dict.nested_value.n1
25

đầu ra

my_dict.nested_value.n1
26

10. setdefault[key[,default]]

Phương pháp này được sử dụng để thêm một khóa vào từ điển khi và chỉ khi nó không có trong từ điển. Phương thức này đặt giá trị khóa thành giá trị mặc định được cung cấp, nếu không thì Không

Phương thức trả về giá trị cho khóa nếu nó có trong từ điển, nếu không thì trả về giá trị mặc định

my_dict.nested_value.n1
27

đầu ra

my_dict.nested_value.n1
28

11. cập nhật [dict]

Phương pháp này được sử dụng để cập nhật các mục từ điển từ từ điển đã cho. Nếu không tìm thấy khóa từ điển đã cho, nó sẽ được thêm vào từ điển. Nếu khóa được tìm thấy, giá trị sẽ được cập nhật

my_dict.nested_value.n1
29

đầu ra.

>>> my_dict = {1:"1", 2:"2"}
>>> del my_dict[1]
>>> print[my_dict]
{2: '2'}
>>> del my_dict
>>> print[my_dict]
Traceback [most recent call last]:
  File "", line 1, in 
NameError: name 'my_dict' is not defined
>>> 
4

Bản tóm tắt

Từ điển là một bộ sưu tập giống như bản đồ để lưu trữ các cặp khóa-giá trị. Các mục trong từ điển được truy cập thông qua chỉ mục dựa trên khóa. Chúng tôi có thể cập nhật, thêm và xóa các mục từ điển. Có nhiều cách khác nhau để sử dụng vòng lặp for để lặp qua các khóa, giá trị hoặc mục từ điển

Một đối tượng có thể là một khóa trong từ điển Python không?

Thuộc tính của Khóa từ điển . Chúng có thể là bất kỳ đối tượng Python tùy ý nào, đối tượng tiêu chuẩn hoặc đối tượng do người dùng định nghĩa .

Các đối tượng có thể được lưu trữ trong từ điển Python không?

Từ điển Python là một cách nhanh chóng, linh hoạt để lưu trữ và truy xuất dữ liệu theo tên hoặc thậm chí là một loại đối tượng phức tạp hơn, thay vì chỉ theo số chỉ mục. Từ điển Python bao gồm một hoặc nhiều khóa—một đối tượng như chuỗi hoặc số nguyên. Mỗi khóa được liên kết với một giá trị, có thể là bất kỳ đối tượng Python nào .

Điều gì có thể là một giá trị trong từ điển Python?

Các chuỗi, số và bộ dữ liệu hoạt động như các khóa và bất kỳ loại nào cũng có thể là một giá trị. Các loại khác có thể hoặc không thể hoạt động chính xác như các khóa [chuỗi và bộ dữ liệu hoạt động rõ ràng vì chúng không thay đổi]. Tra cứu một giá trị không có trong chính tả sẽ đưa ra Lỗi Key -- sử dụng "in" để kiểm tra xem khóa có trong chính tả hay sử dụng dict

Điều gì không thể là một giá trị trong từ điển Python?

Ngay cả các bộ cũng có thể là một khóa. Từ điển hoặc danh sách không thể là khóa. Mặt khác, các giá trị có thể là bất cứ thứ gì theo nghĩa đen và chúng có thể được sử dụng nhiều lần.

Chủ Đề