Hướng dẫn datetime as key in dictionary python - datetime làm khóa trong từ điển python

Tôi đang cố gắng chạy một tập lệnh Python bằng cách sử dụng Cron trong Linux, sẽ xây dựng một từ điển dữ liệu. Tôi đang cố gắng sử dụng các khóa

temps['Madrid'] = 26.0
2AS trong từ điển, nhưng nó dường như gây ra lỗi.

Loại

temps['Madrid'] = 26.0
3 không thể được sử dụng làm khóa từ điển trong Python? Nếu đó là trường hợp, các lựa chọn thay thế của tôi là gì?

Mã số:

time_now = dt.datetime.now().time()
date_today = dt.datetime.now().date()
usage_dict_hourly = {}
date_wise_dict = {}

def constructing_dict(data_int):
    date_wise_dict[usage_dict_hourly[time_now]] = data_int
    print date_wise_dict

Error:

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)

Hướng dẫn datetime as key in dictionary python - datetime làm khóa trong từ điển python

hỏi ngày 11 tháng 3 năm 2016 lúc 17:30Mar 11, 2016 at 17:30

4

Trả lời câu hỏi của bạn về DateTime làm khóa từ điển:

Có, đối tượng thời gian của DateTime có thể được sử dụng làm khóa từ điển.

Điều kiện để sử dụng một đối tượng làm khóa từ điển:

Để được sử dụng làm khóa từ điển, một đối tượng phải hỗ trợ hàm băm (ví dụ: đến

temps['Madrid'] = 26.0
4), so sánh bình đẳng (ví dụ: đến
temps['Madrid'] = 26.0
5 hoặc ________ 66) (...)

(Nguồn: DictionaryKeys)

Hỗ trợ DateTime cho các điều kiện được trích dẫn:

Hoạt động được hỗ trợ:

...

  • Hash, sử dụng làm khóa dict

(Nguồn: DateTime - Đối tượng thời gian)

Tuy nhiên, bạn đang nhận được ngoại lệ này vì Dict

temps['Madrid'] = 26.0
7 trống rỗng.

temps['Madrid'] = 26.0
7 được bắt đầu với
temps['Madrid'] = 26.0
9. Vì vậy, khi bạn cố gắng tìm kiếm phần tử có khóa
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
0 trong chức năng của bạn
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
1, nó sẽ tăng ngoại lệ
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
2, vì khóa đó chưa được tìm thấy.

Đã trả lời ngày 11 tháng 3 năm 2016 lúc 18:41Mar 11, 2016 at 18:41

Emartinelliemartinelliemartinelli

98116 Huy hiệu bạc27 Huy hiệu đồng16 silver badges27 bronze badges

Bạn không thực sự đặt

{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
3 cho bất kỳ giá trị nào theo cách đó, đó là lỗi của bạn. Bạn nên làm một cái gì đó như:

useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int

Hoặc, tốt hơn nữa, chỉ cần sử dụng datetime.datetime.now () làm khóa:

datetime_wise_date[datetime.datetime.now()] = data_int.

Bằng cách này, không có khả năng đụng độ trong giá trị (điều này có thể - mặc dù không thể - đối với useage_dict_hourly)

Đã trả lời ngày 11 tháng 3 năm 2016 lúc 18:41Mar 11, 2016 at 18:41

Hướng dẫn datetime as key in dictionary python - datetime làm khóa trong từ điển python

EmartinelliemartinelliAbhishek Divekar

98116 Huy hiệu bạc27 Huy hiệu đồng2 gold badges15 silver badges28 bronze badges

$$ \ newCommand {\ tp} {\ thinspace.} $$

Cho đến nay trong tài liệu, chúng tôi đã lưu trữ thông tin trong nhiều loại đối tượng khác nhau, chẳng hạn như số, chuỗi, danh sách và mảng. Từ điển là một đối tượng rất linh hoạt để lưu trữ nhiều loại thông tin và đặc biệt khi đọc các tệp. Do đó, đã đến lúc giới thiệu loại từ điển.

Danh sách là một tập hợp các đối tượng được lập chỉ mục bởi một số nguyên đi từ 0 đến số phần tử trừ đi một phần tử. Thay vì tìm kiếm một phần tử thông qua một chỉ mục số nguyên, nó có thể tiện dụng hơn để sử dụng một văn bản. Nói một cách thô bạo, một danh sách trong đó chỉ mục có thể là một văn bản được gọi là {từ điển} trong Python. Các ngôn ngữ máy tính khác sử dụng các tên khác cho cùng một thứ: Hashmap, Hash, mảng kết hợp hoặc bản đồ.

Làm từ điển

Giả sử chúng ta cần lưu trữ nhiệt độ từ ba thành phố: Oslo, London và Paris. Với mục đích này, chúng tôi có thể sử dụng một danh sách,

temps = [13, 15.4, 17.5]
Nhưng sau đó chúng ta cần nhớ chuỗi các thành phố, ví dụ, chỉ số 0 tương ứng với OSLO, INDEX 1 đến London và INDEX 2 với Paris. Đó là, nhiệt độ London thu được là
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
4. Một từ điển với tên thành phố là chỉ số thuận tiện hơn, bởi vì điều này cho phép chúng tôi viết
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
5 để tra cứu nhiệt độ ở London. Một từ điển như vậy được tạo bởi một trong hai câu sau đây
temps = {'Oslo': 13, 'London': 15.4, 'Paris': 17.5}
# or
temps = dict(Oslo=13, London=15.4, Paris=17.5)
Các cặp giá trị văn bản bổ sung có thể được thêm vào khi muốn. Ví dụ, chúng ta có thể viết
temps['Madrid'] = 26.0
Từ điển
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
6 hiện có bốn cặp giá trị văn bản và
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
7 mang lại
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}

Hoạt động từ điển

Chuỗi "chỉ số" trong từ điển được gọi là các khóa. Để lặp qua các khóa trong từ điển

{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
8, người ta viết
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
9 và hoạt động với
>>> for city in temps:
...     print 'The temperature in %s is %g' % (city, temps[city])
...
The temperature in Paris is 17.5
The temperature in Oslo is 13
The temperature in London is 15.4
The temperature in Madrid is 26
0 và giá trị tương ứng
>>> for city in temps:
...     print 'The temperature in %s is %g' % (city, temps[city])
...
The temperature in Paris is 17.5
The temperature in Oslo is 13
The temperature in London is 15.4
The temperature in Madrid is 26
1 bên trong vòng lặp. Chúng tôi có thể áp dụng kỹ thuật này để viết ra nhiệt độ trong từ điển
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
6 từ đoạn trước:

>>> for city in temps:
...     print 'The temperature in %s is %g' % (city, temps[city])
...
The temperature in Paris is 17.5
The temperature in Oslo is 13
The temperature in London is 15.4
The temperature in Madrid is 26
Chúng ta có thể kiểm tra xem một khóa có trong từ điển bằng cú pháp
>>> for city in temps:
...     print 'The temperature in %s is %g' % (city, temps[city])
...
The temperature in Paris is 17.5
The temperature in Oslo is 13
The temperature in London is 15.4
The temperature in Madrid is 26
3 không Trong từ điển là thứ tự của danh sách các khóa được trả lại là không thể đoán trước. Nếu bạn cần đi qua các phím theo một thứ tự nhất định, bạn có thể sắp xếp các phím. Một vòng lặp trên các khóa trong từ điển
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
6 theo thứ tự chữ cái được viết là
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
2 Python cũng có loại từ điển đặc biệt
>>> for city in temps:
...     print 'The temperature in %s is %g' % (city, temps[city])
...
The temperature in Paris is 17.5
The temperature in Oslo is 13
The temperature in London is 15.4
The temperature in Madrid is 26
7 trong đó các cặp giá trị khóa có thứ tự cụ thể, xem phần Từ điển với giá trị mặc định và đặt hàng.

Một cặp giá trị khóa có thể được xóa bởi

>>> for city in temps:
...     print 'The temperature in %s is %g' % (city, temps[city])
...
The temperature in Paris is 17.5
The temperature in Oslo is 13
The temperature in London is 15.4
The temperature in Madrid is 26
8:

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
3

Đôi khi chúng ta cần lấy một bản sao của một từ điển:

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
4 Lưu ý rằng nếu hai biến đề cập đến cùng một từ điển và chúng tôi thay đổi nội dung của từ điển thông qua một trong các biến, thay đổi sẽ được nhìn thấy trong cả hai biến:
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
5 để tránh
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
6 bị ảnh hưởng bằng cách thêm một cặp có giá trị khóa mới vào
>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
0,
>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
0 phải là bản sao của
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
6.

Nhận xét

Trong Python phiên bản 2.x,

>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
3 trả về một đối tượng danh sách trong khi ở Python phiên bản 3.x,
>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
3 chỉ cho phép lặp lại các khóa. Để ghi mã hoạt động với cả hai phiên bản, người ta có thể sử dụng
>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
5 trong các trường hợp thực sự cần một danh sách và chỉ
>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
3 trong vòng lặp
>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
7 trên các khóa.

Ví dụ: đa thức như từ điển

Các đối tượng Python không thể thay đổi nội dung của chúng được gọi là các loại dữ liệu bất biến và bao gồm

>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
8,
>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
9,
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
00,
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
01 và
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
02. Danh sách và từ điển có thể thay đổi nội dung của chúng và được gọi là các đối tượng có thể thay đổi.

Các chìa khóa trong từ điển không bị giới hạn là chuỗi. Trong thực tế, bất kỳ đối tượng Python bất biến nào cũng có thể được sử dụng làm chìa khóa. Ví dụ: nếu bạn muốn một danh sách là khóa, nó không thể được sử dụng vì danh sách có thể thay đổi nội dung của chúng là các đối tượng có thể thay đổi, nhưng một tuple sẽ làm, vì nó là bất biến.

Một loại khóa phổ biến trong từ điển là số nguyên. Tiếp theo chúng ta sẽ giải thích cách từ điển với số nguyên như chìa khóa cung cấp một cách tiện dụng để thể hiện đa thức. Hãy xem xét đa thức $$ \ start Các cặp hiệu quả, trong trường hợp này là hệ số \ (-1 \) thuộc về công suất 0, hệ số 1 thuộc về công suất 2 và hệ số 3 thuộc về công suất 7. Một từ điển có thể được sử dụng để ánh xạ sức mạnh thành hệ số:

Tất nhiên, một danh sách cũng có thể được sử dụng, nhưng trong trường hợp này, chúng ta cũng phải điền vào tất cả các hệ số không không có hệ số. Đối với đa thức \ (1+x^{100} \) từ điển giữ hai phần tử trong khi danh sách giữ 101 phần tử (xem Bài tập 7: So sánh các cấu trúc dữ liệu cho đa thức).

Chức năng sau đây có thể được sử dụng để đánh giá một đa thức được biểu thị như một từ điển:

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
8 Đối số
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
03 phải là một từ điển trong đó
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
04 giữ hệ số liên quan đến thuật ngữ
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
05. Việc triển khai nhỏ gọn hơn có thể sử dụng hàm
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
06 của Python để tổng hợp các yếu tố của danh sách:
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
9 nghĩa là, trước tiên chúng tôi lập danh sách các thuật ngữ trong đa thức bằng cách sử dụng danh sách hiểu và sau đó chúng tôi cung cấp danh sách này vào hàm
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
06 ( Trên thực tế, chúng ta có thể bỏ dấu ngoặc và lưu trữ danh sách -
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
06 có thể trực tiếp thêm các điều khoản
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
09). Lưu ý rằng tên
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
06 khác nhau trong hai triển khai: trong lần đầu tiên,
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
06 là đối tượng
>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
9 và trong lần thứ hai,
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
06 là một hàm. Khi chúng tôi đặt
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
14 trong lần triển khai đầu tiên, chúng tôi liên kết tên
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
06 với đối tượng
>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
9 mới và hàm Python tích hợp liên quan đến tên
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
06 sau đó không còn có thể truy cập được bên trong hàm
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
18 (thực tế, điều này không đúng Bởi vì
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
06 là một biến cục bộ trong khi hàm tổng được liên kết với tên toàn cầu
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
06, luôn có thể đạt được thông qua
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
21). Tuy nhiên, bên ngoài chức năng,
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
06 sẽ là hàm tổng hợp (trừ khi chúng tôi ràng buộc tên toàn cầu
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
06 với một đối tượng khác ở một nơi khác trong chương trình chính.

Với danh sách thay vì từ điển để biểu diễn đa thức, cần có chức năng đánh giá hơi khác nhau:

useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
0 Nếu có nhiều số không trong danh sách
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
03,
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
25 phải thực hiện tất cả các phép nhân với các số không, trong khi
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
18 tính toán với các hệ số khác không và do đó hiệu quả hơn.

Một lợi thế lớn khác của việc sử dụng từ điển để thể hiện đa thức chứ không phải là danh sách là các quyền lực tiêu cực dễ dàng được phép, ví dụ:

useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
1 có thể biểu diễn \ (\ frac {1} {2} x^{-3} + 2x^4 \). Với một đại diện danh sách, các quyền hạn tiêu cực đòi hỏi nhiều việc giữ sách hơn. Ví dụ, chúng ta có thể đặt
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
2 và nhớ rằng
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
27 là hệ số liên quan đến công suất
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
28. Cụ thể, hàm
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
25 sẽ không còn hoạt động cho các danh sách như vậy, trong khi hàm
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
18 cũng hoạt động cho các từ điển có khóa âm (quyền lực).

Có một đối tác từ điển để liệt kê các toàn bộ, được gọi là trình biết từ điển, để nhanh chóng tạo ra các cặp giá trị khóa tham số hóa với vòng lặp

>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
7. Việc xây dựng như vậy là thuận tiện để tạo ra các hệ số trong đa thức:

useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
3 Từ điển
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
8 hiện có chứa các cặp chính thức sức mạnh của đa thức Taylor của mức độ
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
33 cho \ (e^{-x} \).

Bây giờ bạn được khuyến khích giải quyết bài tập 8: Tính toán đạo hàm của một đa thức để trở nên quen thuộc hơn với khái niệm từ điển.

Từ điển với các giá trị mặc định và đặt hàng

Từ điển có giá trị mặc định

Nhìn lên các khóa không có trong từ điển đòi hỏi phải xử lý đặc biệt. Hãy xem xét một từ điển đa thức của loại được giới thiệu trong ví dụ phần: đa thức là từ điển. Nói rằng chúng tôi có \ (2x^{ -3} -1.5x^{ -1} -2x^2 \)

useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
4 Nếu mã cố gắng tra cứu
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
34, thì hoạt động này sẽ dẫn đến
{'Oslo': 13, 'London': 15.4, 'Paris': 17.5, 'Madrid': 26.0}
2 vì
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
36 không phải là khóa đã đăng ký trong
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
37. Do đó, chúng tôi cần phải thực hiện
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
5 hoặc sử dụng
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
6 trong đó
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
38 trả về
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
39 nếu
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
40 và giá trị mặc định
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
41 nếu không. Khả năng thứ ba là làm việc với một từ điển với giá trị mặc định:
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
7
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
42 có thể được lập chỉ mục bởi bất kỳ khóa nào và đối với các khóa chưa đăng ký, hàm
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
43 được gọi để cung cấp giá trị. Đây phải là một chức năng mà không có đối số. Thông thường, một hàm riêng biệt không bao giờ được thực hiện, nhưng một loại được chèn hoặc hàm lambda. Ví dụ trên tương đương với
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
8 trong trường hợp sau
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
44 được gọi cho mỗi khóa không xác định và
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
44 trả về một đối tượng
>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
9 có giá trị bằng không. Bây giờ chúng ta có thể tìm kiếm
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
47 và nhận được giá trị mặc định 0. Phải nhận xét rằng khóa này sau đó là một phần của từ điển:
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
9

Đặt hàng từ điển

Các yếu tố của một từ điển có một thứ tự không xác định. Ví dụ,

datetime_wise_date[datetime.datetime.now()] = data_int.
0 Người ta có thể kiểm soát thứ tự sắp xếp các khóa của tôi, bằng cách sắp xếp mặc định (theo thứ tự bảng chữ cái cho các khóa chuỗi, thứ tự tăng dần cho các khóa số):
datetime_wise_date[datetime.datetime.now()] = data_int.
1 Hàm
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
48 cũng chấp nhận một đối số tùy chọn trong đó người dùng có thể cung cấp chức năng sắp xếp hai khóa.

Tuy nhiên, Python có một loại từ điển bảo tồn thứ tự của các khóa khi chúng đã được đăng ký:

datetime_wise_date[datetime.datetime.now()] = data_int.
2

Dưới đây là một ví dụ với ngày là khóa trong đó thứ tự là quan trọng.

datetime_wise_date[datetime.datetime.now()] = data_int.
3 Thứ tự của các phím trong vòng lặp không phải là thứ tự đã đăng ký đúng, nhưng điều này dễ dàng đạt được bởi
>>> for city in temps:
...     print 'The temperature in %s is %g' % (city, temps[city])
...
The temperature in Paris is 17.5
The temperature in Oslo is 13
The temperature in London is 15.4
The temperature in Madrid is 26
7
datetime_wise_date[datetime.datetime.now()] = data_int.
4

Một nhận xét về các giải pháp thay thế nên được thực hiện ở đây. Cố gắng sắp xếp từ điển

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
03 khi nó là một đối tượng
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
51 thông thường không giúp ích gì, vì theo mặc định, việc sắp xếp sẽ theo thứ tự bảng chữ cái, dẫn đến chuỗi
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
52,
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
53 và
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
54. Tuy nhiên, điều giúp ích là sử dụng các đối tượng
temps['Madrid'] = 26.0
3 của Python làm khóa phản ánh ngày, vì các đối tượng này sẽ được sắp xếp chính xác. Một đối tượng
temps['Madrid'] = 26.0
3 có thể được tạo từ một chuỗi như
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
57 bằng cách sử dụng cú pháp đặc biệt (xem tài liệu mô -đun). Mã liên quan là

datetime_wise_date[datetime.datetime.now()] = data_int.
5 In theo thứ tự được sắp xếp cho trình tự đúng ngày:
datetime_wise_date[datetime.datetime.now()] = data_int.
6 Thời gian tự động là một phần của đối tượng
temps['Madrid'] = 26.0
3 và được đặt thành
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
59 khi không được chỉ định.

Mặc dù

>>> for city in temps:
...     print 'The temperature in %s is %g' % (city, temps[city])
...
The temperature in Paris is 17.5
The temperature in Oslo is 13
The temperature in London is 15.4
The temperature in Madrid is 26
7 cung cấp một giải pháp đơn giản và ngắn hơn để giữ các khóa (ở đây ngày) theo đúng thứ tự trong từ điển, sử dụng các đối tượng
temps['Madrid'] = 26.0
3 cho ngày có nhiều lợi thế: ngày có thể được định dạng và viết ra theo nhiều cách khác nhau, việc đếm ngày giữa hai ngày là dễ dàng , tính toán số tuần tương ứng và tên của ngày trong tuần được hỗ trợ, để đề cập đến một số chức năng.

Ví dụ: Tệp dữ liệu trong từ điển

Vấn đề

Tệp

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
62 chứa một bảng mật độ của các chất khác nhau được đo trong \ (\ hbox {g}/\ hbox {cm}^3 \):

datetime_wise_date[datetime.datetime.now()] = data_int.
7

Trong một chương trình, chúng tôi muốn truy cập các dữ liệu mật độ này. Một từ điển có tên của chất là khóa và mật độ tương ứng là giá trị có vẻ phù hợp để lưu trữ dữ liệu.

Dung dịch

Chúng ta có thể đọc tệp

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
63 từng dòng, chia từng dòng thành các từ, sử dụng chuyển đổi float của từ cuối làm giá trị mật độ và một hoặc hai từ còn lại làm khóa trong từ điển.

datetime_wise_date[datetime.datetime.now()] = data_int.
8 Mã này được tìm thấy trong mật độ tệp.py. Với các hoạt động chuỗi từ phần Các hoạt động chung trên các chuỗi, chúng tôi có thể tránh được cách xử lý đặc biệt của một hoặc hai từ trong tên của chất và đạt được mã đơn giản và chung hơn, xem Bài tập 3: Sử dụng các hoạt động chuỗi để cải thiện chương trình.

Ví dụ: Dữ liệu tệp trong từ điển lồng nhau

Vấn đề

Chúng tôi được cung cấp một tệp dữ liệu với các phép đo của một số thuộc tính có tên đã cho (ở đây

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
64,
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
65,
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
66 ...). Mỗi tài sản được đo một số lần nhất định. Dữ liệu được tổ chức dưới dạng bảng trong đó các hàng chứa các phép đo và các cột biểu thị các thuộc tính đo được:

datetime_wise_date[datetime.datetime.now()] = data_int.
9

Từ

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
67 không có dữ liệu, tức là, chúng tôi thiếu một phép đo. Chúng tôi muốn đọc bảng này thành một từ điển
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
03 để chúng tôi có thể tìm kiếm số đo không.
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
69 của (nói) thuộc tính
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
66 là
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
71. Đối với mỗi thuộc tính
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
72, chúng tôi muốn tính toán giá trị trung bình của tất cả các phép đo và lưu trữ điều này là
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
73.

Thuật toán

Thuật toán để tạo từ điển

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
03 như sau:

temps = [13, 15.4, 17.5]
0
  • Kiểm tra dòng đầu tiên: Chia nó thành các từ và khởi tạo từ điển với tên thuộc tính là các khóa và từ điển trống {} làm giá trị
  • Đối với mỗi dòng còn lại trong tệp
    • Chia dòng thành từ
    • cho mỗi từ sau từ đầu tiên
      • Nếu từ không phải là
         in constructing_dict(data_int)
             36 
             37 def constructing_dict(data_int):
        ---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
             39     print date_wise_dict
             40 
        
        KeyError: datetime.time(22, 40, 33, 746509)
        
        67:
        • chuyển đổi từ thành một số thực và lưu trữ số trong từ điển có liên quan

Thực hiện

Một khía cạnh mới cần thiết trong giải pháp là từ điển lồng nhau, nghĩa là từ điển từ điển. Chủ đề thứ hai được giải thích lần đầu tiên, thông qua một ví dụ:

temps = [13, 15.4, 17.5]
1 quan sát ở đây rằng giá trị của
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
76 là một từ điển, chúng ta có thể lập chỉ mục với các khóa
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
77 và
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
78:
temps = [13, 15.4, 17.5]
2 Nói cách khác, các công việc lập chỉ mục lặp lại cho các từ điển lồng nhau như cho danh sách lồng nhau. Việc lập chỉ mục lặp đi lặp lại không áp dụng cho
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
79 vì giá trị đó chỉ là một số nguyên:
temps = [13, 15.4, 17.5]
3

Khi chúng tôi hiểu khái niệm từ điển lồng nhau, chúng tôi đang ở một vị trí để trình bày một mã hoàn chỉnh để giải quyết vấn đề của chúng tôi về việc tải dữ liệu bảng trong tệp

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
80 vào từ điển lồng nhau
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
03 và tính toán các giá trị trung bình. Đầu tiên, chúng tôi liệt kê chương trình, được lưu trữ trong Tệp Table2Dict.py và hiển thị đầu ra của chương trình. Sau đó, chúng tôi mổ xẻ mã chi tiết.

temps = [13, 15.4, 17.5]
4 Đầu ra tương ứng từ chương trình này trở thành
temps = [13, 15.4, 17.5]
5 Để xem từ điển
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
03 lồng nhau, chúng tôi có thể chèn
temps = [13, 15.4, 17.5]
6 tạo ra một cái gì đó như
temps = [13, 15.4, 17.5]
7

Mổ xẻ

Để hiểu một chương trình máy tính, bạn cần hiểu kết quả của mỗi câu là gì. Hãy để chúng tôi làm việc thông qua mã, gần như từng dòng và xem những gì nó làm.

Đầu tiên, chúng tôi tải tất cả các dòng của tệp vào danh sách các chuỗi gọi là

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
83. Biến
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
84 đề cập đến chuỗi

temps = [13, 15.4, 17.5]
8 Chúng tôi chia dòng này thành một danh sách các từ, được gọi là
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
85, sau đó chứa
temps = [13, 15.4, 17.5]
9 với mỗi tên thuộc tính này, chúng tôi liên kết một từ điển với số đo là khóa và giá trị thuộc tính là giá trị, nhưng trước tiên chúng tôi phải tạo "bên trong" này Từ điển trống rỗng trước khi chúng ta có thể thêm các phép đo:
temps = {'Oslo': 13, 'London': 15.4, 'Paris': 17.5}
# or
temps = dict(Oslo=13, London=15.4, Paris=17.5)
0 Thông qua đầu tiên trong vòng lặp
>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
7 chọn chuỗi
temps = {'Oslo': 13, 'London': 15.4, 'Paris': 17.5}
# or
temps = dict(Oslo=13, London=15.4, Paris=17.5)
1 làm biến
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
87. Chúng tôi chia dòng này thành các từ, từ đầu tiên (
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
88) là số đo, trong khi phần còn lại
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
89 là danh sách các giá trị thuộc tính, ở đây có tên
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
90. Để ghép các thuộc tính và giá trị phù hợp, chúng tôi lặp qua các danh sách
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
85 và
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
90 đồng thời:
temps = {'Oslo': 13, 'London': 15.4, 'Paris': 17.5}
# or
temps = dict(Oslo=13, London=15.4, Paris=17.5)
2 nhớ lại rằng một số giá trị có thể bị thiếu và chúng tôi bỏ để ghi lại giá trị đó (chúng tôi có thể đặt giá trị thành
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
93). Vì danh sách
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
90 chứa các chuỗi (từ) được đọc từ tệp, chúng ta cần chuyển đổi rõ ràng từng chuỗi thành số
>>> if 'Berlin' in temps:
...     print 'Berlin:', temps['Berlin']
... else:
...     print 'No temperature data for Berlin'
...
No temperature data for Berlin
9 trước khi chúng ta có thể tính toán với các giá trị.


Hình 1: Minh họa từ điển lồng nhau được tạo trong chương trình

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
96.

Hướng dẫn datetime as key in dictionary python - datetime làm khóa trong từ điển python

Sau vòng lặp

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
97, chúng tôi có một từ điển
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
03 từ điển trong đó tất cả các giá trị thuộc tính được lưu trữ cho mỗi số đo và tên thuộc tính. Hình 1 cho thấy một biểu diễn đồ họa của từ điển
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
03.

Nó vẫn còn để tính toán các giá trị trung bình. Đối với mỗi tên thuộc tính

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
72, tức là, khóa trong từ điển
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
03, chúng ta có thể trích xuất các giá trị được ghi là danh sách
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
02 và chỉ cần gửi danh sách này đến hàm
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
06 của Python và chia cho số lượng các giá trị đo được cho thuộc tính này, tức là độ dài của danh sách:

temps = {'Oslo': 13, 'London': 15.4, 'Paris': 17.5}
# or
temps = dict(Oslo=13, London=15.4, Paris=17.5)
3 Cách khác, chúng ta có thể viết một vòng lặp rõ ràng để tính toán trung bình:
temps = {'Oslo': 13, 'London': 15.4, 'Paris': 17.5}
# or
temps = dict(Oslo=13, London=15.4, Paris=17.5)
4

Khi chúng tôi muốn tìm kiếm một phép đo không.

 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
33 của tài sản
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
65, chúng ta phải nhớ lại rằng phép đo cụ thể này có thể bị thiếu để chúng ta phải làm một bài kiểm tra nếu
 in constructing_dict(data_int)
     36 
     37 def constructing_dict(data_int):
---> 38     date_wise_dict[usage_dict_hourly[time_now]] = data_int
     39     print date_wise_dict
     40 

KeyError: datetime.time(22, 40, 33, 746509)
33 là chìa khóa trong từ điển
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
07:

temps = {'Oslo': 13, 'London': 15.4, 'Paris': 17.5}
# or
temps = dict(Oslo=13, London=15.4, Paris=17.5)
5

Ví dụ: Đọc và vẽ dữ liệu được ghi lại vào các ngày cụ thể

Vấn đề

Chúng tôi muốn so sánh sự phát triển của giá cổ phiếu của một số công ty khổng lồ trong ngành máy tính: Microsoft, Apple và Google. Các tệp dữ liệu liên quan cho giá cổ phiếu có thể được tải xuống từ http://finance.yahoo.com. Điền vào tên của công ty và nhấp vào tài chính tìm kiếm trong thanh hàng đầu của trang này và chọn giá lịch sử ở khung bên trái. Trên trang web kết quả, người ta có thể chỉ định ngày bắt đầu và kết thúc cho giá lịch sử của cổ phiếu. Các giá trị mặc định đã được sử dụng trong ví dụ này. Đánh dấu các giá trị hàng tháng và nhấp chuột nhận giá dẫn đến một bảng giá cổ phiếu cho mỗi tháng kể từ khi cổ phiếu được giới thiệu. Bảng có thể được tải xuống dưới dạng tệp bảng tính ở định dạng CSV, thường trông giống như

temps = {'Oslo': 13, 'London': 15.4, 'Paris': 17.5}
# or
temps = dict(Oslo=13, London=15.4, Paris=17.5)
6 Định dạng tệp rất đơn giản: Các cột được phân tách bằng dấu phẩy, dòng đầu tiên chứa các tiêu đề cột và các dòng dữ liệu có ngày trong cột đầu tiên và các biện pháp khác nhau về giá cổ phiếu trong các cột tiếp theo. Đọc về ý nghĩa của các dữ liệu khác nhau trên Yahoo! Các trang web tiết lộ rằng mối quan tâm của chúng tôi liên quan đến cột cuối cùng (vì giá này được điều chỉnh cho các khoản chia tách và cổ tức). Ba tệp dữ liệu có liên quan có thể được tìm thấy trong thư mục SRC/Tệp có tên
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
08, trong đó
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
09 là
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
10,
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
11 hoặc
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
12.

Nhiệm vụ được minh họa trực quan giá trị thị trường chứng khoán lịch sử, tương đối của các công ty này. Với mục đích này, việc mở rộng quy mô của một công ty là tự nhiên là tự nhiên để bắt đầu với giá trị đơn vị khi công ty gần đây nhất tham gia thị trường. Vì ngày nhập khác nhau, điểm dữ liệu lâu đời nhất có thể được bỏ qua sao cho tất cả các điểm dữ liệu tương ứng với ngày giao dịch đầu tiên mỗi tháng.

Dung dịch

Có hai phần chính của vấn đề này: đọc tệp và vẽ dữ liệu. Phần đọc khá đơn giản, trong khi phần âm mưu cần một số cân nhắc đặc biệt vì các giá trị \ (x \) trong lô là ngày và không phải là số thực. Trong văn bản sắp tới, chúng tôi giải quyết từng con nhỏ riêng lẻ, cho thấy các đoạn python có liên quan. Chương trình hoàn chỉnh được tìm thấy trong tệp StockPrices.py.

Chúng tôi bắt đầu với phần đọc. Vì việc đọc sẽ được lặp lại cho một số công ty, chúng tôi tạo ra một chức năng để trích xuất dữ liệu liên quan cho một công ty cụ thể. Những dữ liệu này bao gồm các ngày trong cột 1 và giá cổ phiếu trong cột cuối cùng. Vì chúng tôi muốn vẽ giá so với ngày, nên sẽ thuận tiện để biến ngày thành các đối tượng

useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
13. Nói chi tiết hơn, các thuật toán có những điểm sau:

  1. Mở tập tin
  2. Tạo hai danh sách trống, ngày và giá, để thu thập dữ liệu
  3. Đọc dòng đầu tiên (không quan tâm)
  4. Đối với mỗi dòng trong phần còn lại của tệp:
    1. Chia dòng WRT. dấu phẩy thành lời nói
    2. Nối từ đầu tiên vào danh sách ngày
    3. nối từ cuối vào danh sách giá
  5. Đảo ngược các danh sách (ngày cũ nhất đầu tiên)
  6. Chuyển đổi chuỗi ngày thành các đối tượng DateTime
  7. Chuyển đổi danh sách giá thành mảng float cho các tính toán
  8. Ngày trả lại và giá cả, ngoại trừ điểm dữ liệu (lâu đời nhất) đầu tiên
Có một vài điểm bổ sung để xem xét. Đầu tiên, các từ trên một dòng là chuỗi và ít nhất là giá (từ cuối cùng) nên được chuyển đổi thành một chiếc phao. Thứ hai, công thức chuyển đổi ngày như '2008-02-04' thành
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
13 (hoặc
temps['Madrid'] = 26.0
3) đối tượng diễn ra dưới dạng
temps = {'Oslo': 13, 'London': 15.4, 'Paris': 17.5}
# or
temps = dict(Oslo=13, London=15.4, Paris=17.5)
7 Điều tuyệt vời với đối tượng
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
13 và
temps['Madrid'] = 26.0
3 là chúng ta có thể tính toán với chúng và đặc biệt sử dụng chúng trong việc vẽ với matplotlib.

Bây giờ chúng ta có thể dịch thuật toán sang mã Python:

temps = {'Oslo': 13, 'London': 15.4, 'Paris': 17.5}
# or
temps = dict(Oslo=13, London=15.4, Paris=17.5)
8

Mặc dù chúng tôi làm việc với ba công ty trong ví dụ này, nhưng rất dễ dàng và hầu như luôn luôn là một ý tưởng tốt để khái quát chương trình cho một số lượng lớn các công ty. Tất cả những gì chúng tôi giả định là giá cổ phiếu của họ nằm trong các tệp có tên của mẫu

useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
08, trong đó
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
09 là tên công ty. Với sự trợ giúp của chức năng, hãy gọi
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
20, chúng tôi nhận được danh sách tất cả các tệp đó. Bằng cách lặp qua danh sách này, trích xuất tên công ty và gọi
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
21, chúng tôi có thể lưu trữ ngày và giá tương ứng trong từ điển
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
22 và
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
23, được lập chỉ mục bởi tên công ty:

temps = {'Oslo': 13, 'London': 15.4, 'Paris': 17.5}
# or
temps = dict(Oslo=13, London=15.4, Paris=17.5)
9

Bước tiếp theo là bình thường hóa giá sao cho chúng trùng khớp vào một ngày nhất định. Chúng tôi chọn ngày này là tháng đầu tiên chúng tôi có dữ liệu cho công ty trẻ nhất. Trong danh sách các đối tượng

useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
13 hoặc
temps['Madrid'] = 26.0
3, chúng ta có thể sử dụng hàm
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
26 và
useage_dict_hourly[time_now] = None
date_wise_dict[useage_dict_hourly[time_now]] = data_int
27 của Python để trích xuất ngày mới nhất và lâu đời nhất.

temps['Madrid'] = 26.0
0

Giá chuẩn hóa thay đổi rất nhiều, vì vậy để thấy sự phát triển hơn 30 năm, chúng tôi quyết định lấy logarit của giá. Quy trình âm mưu có phần liên quan đến vậy người đọc nên lấy mã sắp tới làm công thức nhiều hơn là một chuỗi tuyên bố để thực sự hiểu:

temps['Madrid'] = 26.0
1 Hình 2 cho thấy sơ đồ kết quả. Chúng tôi quan sát thấy rằng giá được chuẩn hóa trùng khớp khi Google tham gia thị trường, tại đây vào ngày 1 tháng 9 năm 2004. Lưu ý rằng có thang đo log trên trục dọc. Bạn có thể muốn vạch ra mức giá bình thường hóa thực sự để có ấn tượng mạnh mẽ hơn về giá trị tăng đáng kể gần đây, đặc biệt là đối với Apple.


Hình 2: Sự phát triển của giá cổ phiếu cho ba công ty.

Hướng dẫn datetime as key in dictionary python - datetime làm khóa trong từ điển python