Tôi đã nghiên cứu sự khác biệt giữa danh sách và bộ dữ liệu [trong Python]. Một điều hiển nhiên là các bộ dữ liệu là bất biến [các giá trị không thể thay đổi sau khi gán ban đầu], trong khi danh sách là có thể thay đổi.
Một câu trong bài viết có tôi:
Chỉ các yếu tố bất biến mới có thể được sử dụng làm khóa từ điển, và do đó chỉ có các bộ đếm và không phải danh sách có thể được sử dụng làm khóa.
Tôi có một thời gian khó khăn khi nghĩ về một tình huống mà tôi muốn sử dụng một bộ tuple làm khóa từ điển. Bạn có thể cung cấp một vấn đề ví dụ trong đó đây sẽ là giải pháp tự nhiên, hiệu quả, thanh lịch hoặc rõ ràng?
Edit:
Cảm ơn các ví dụ của bạn. Cho đến nay tôi nhận được rằng một ứng dụng rất quan trọng là bộ đệm của các giá trị chức năng.
QTMFLD
2.8062 Huy hiệu vàng19 Huy hiệu bạc36 Huy hiệu đồng2 gold badges19 silver badges36 bronze badges
Hỏi ngày 21 tháng 12 năm 2009 lúc 7:01Dec 21, 2009 at 7:01
1
Ví dụ cổ điển: Bạn muốn lưu trữ giá trị điểm là Tuple of [x, y]
Đã trả lời ngày 21 tháng 12 năm 2009 lúc 7:14Dec 21, 2009 at 7:14
ImranimranImran
84.3K23 Huy hiệu vàng96 Huy hiệu bạc129 Huy hiệu đồng23 gold badges96 silver badges129 bronze badges
3
salaries = {}
salaries[['John', 'Smith']] = 10000.0
salaries[['John', 'Parker']] = 99999.0
Chỉnh sửa 1 Tất nhiên bạn có thể làm salaries['John Smith'] = whatever
, nhưng sau đó bạn sẽ phải làm thêm để tách khóa thành tên đầu tiên và tên cuối cùng. Thế còn pointColor[[x, y, z]] = "red"
, ở đây lợi ích của khóa Tuple là nổi bật hơn. Of course you can do salaries['John Smith'] = whatever
, but
then you'll have to do extra work to separate the key into first and last names. What about pointColor[[x, y, z]] = "red"
, here the benefit of tuple key is more prominent.
Tôi phải nhấn mạnh rằng đây không phải là thực hành tốt nhất. Trong nhiều trường hợp, bạn nên tạo ra các lớp học đặc biệt để xử lý các tình huống như thế, nhưng Arrieta đã yêu cầu các ví dụ, mà tôi đã đưa cho cô ấy [anh ấy].
Chỉnh sửa 0
Nhân tiện, mỗi phần tử tuple cũng phải có thể băm:
>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
File "", line 1, in
TypeError: list objects are unhashable
>>>
Đã trả lời ngày 21 tháng 12 năm 2009 lúc 7:06Dec 21, 2009 at 7:06
Boris Gorelikboris GorelikBoris Gorelik
28.4K37 Huy hiệu vàng126 Huy hiệu bạc169 Huy hiệu đồng37 gold badges126 silver badges169 bronze badges
7
Trong bối cảnh học máy và học sâu, nếu bạn đang thực hiện tìm kiếm HyperParameter cho các siêu âm tốt nhất, thì việc sử dụng Tuples làm khóa chắc chắn là siêu hữu ích.
Giả sử bạn đang tìm kiếm sự kết hợp siêu đồng tính tốt nhất cho ____10,
>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
File "", line 1, in
TypeError: list objects are unhashable
>>>
1 và >>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
File "", line 1, in
TypeError: list objects are unhashable
>>>
2.Sau đó, bạn có thể có một từ điển trong Python nơi bạn tạo ra sự kết hợp khác nhau mà các HPARAM này có thể lấy làm khóa và ma trận trọng lượng tương ứng của chúng từ thuật toán đào tạo làm giá trị
hparams_hist = {}
hparams_hist[[0.001, 0.7, 5]] = weight_matrix1
hparams_hist[[0.0001, 0.8, 2]] = weight_matrix2
Những ma trận trọng lượng này là cần thiết hơn nữa để đưa ra dự đoán thời gian thực.
Đã trả lời ngày 18 tháng 11 năm 2017 lúc 16:40Nov 18, 2017 at 16:40
kmario23kmario23kmario23
53.6K13 Huy hiệu vàng149 Huy hiệu bạc146 Huy hiệu đồng13 gold badges149 silver badges146 bronze badges
1
Tôi sử dụng rất nhiều thời gian làm khóa
>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
File "", line 1, in
TypeError: list objects are unhashable
>>>
3, ví dụ:Tôi sử dụng chúng khi tôi phải tạo một khóa duy nhất từ nhiều giá trị, ví dụ:
Dựa trên
4, khóa>>> d = {} >>> t = [range[3], range[10, 13]] >>> d[t] = 11 Traceback [most recent call last]: File "", line 1, in TypeError: list objects are unhashable >>>
5 có thể là khóa =>>> d = {} >>> t = [range[3], range[10, 13]] >>> d[t] = 11 Traceback [most recent call last]: File "", line 1, in TypeError: list objects are unhashable >>>
6 nhưng cách tốt hơn là>>> d = {} >>> t = [range[3], range[10, 13]] >>> d[t] = 11 Traceback [most recent call last]: File "", line 1, in TypeError: list objects are unhashable >>>
7 vì>>> d = {} >>> t = [range[3], range[10, 13]] >>> d[t] = 11 Traceback [most recent call last]: File "", line 1, in TypeError: list objects are unhashable >>>
- Nó dễ đọc hơn, ngắn hơn và ít tính toán hơn
- Dễ dàng hơn để truy xuất các giá trị riêng lẻ
- Quan trọng nhất là
8 là sai và có thể không cung cấp các khóa duy nhất cho tất cả các giá trị của>>> d = {} >>> t = [range[3], range[10, 13]] >>> d[t] = 11 Traceback [most recent call last]: File "", line 1, in TypeError: list objects are unhashable >>>
4 và>>> d = {} >>> t = [range[3], range[10, 13]] >>> d[t] = 11 Traceback [most recent call last]: File "", line 1, in TypeError: list objects are unhashable >>>
5, ví dụ: Khi các giá trị chứa>>> d = {} >>> t = [range[3], range[10, 13]] >>> d[t] = 11 Traceback [most recent call last]: File "", line 1, in TypeError: list objects are unhashable >>>
1hparams_hist = {} hparams_hist[[0.001, 0.7, 5]] = weight_matrix1 hparams_hist[[0.0001, 0.8, 2]] = weight_matrix2
Lưu trữ kết quả của một hàm
def func[a1, b1]: if [a1,b1] in cache: return cache[[a1,b1]] ...
Yamaneko
3.3232 Huy hiệu vàng36 Huy hiệu bạc56 Huy hiệu Đồng2 gold badges36 silver badges56 bronze badges
Đã trả lời ngày 21 tháng 12 năm 2009 lúc 7:36Dec 21, 2009 at 7:36
Anurag uniyalanurag uniyalAnurag Uniyal
83,8K39 Huy hiệu vàng170 Huy hiệu bạc216 Huy hiệu đồng39 gold badges170 silver badges216 bronze badges
Tôi đã sử dụng các bộ dữ liệu làm khóa từ điển trong ứng dụng so sánh các thiết bị mạng theo vị trí địa lý. Vì các thiết bị được đặt tên tương tự cho mỗi vị trí, nó cung cấp một cách tự nhiên để biết liệu một thiết bị có khớp với việc ghép đôi đó vẫn chưa được nhìn thấy trong khi xử lý bội số hay không.
i.e.
seen = {}
seen[['abc', 'lax']] = 1
seen[['xyz', 'nyc']] = 1
Đã trả lời ngày 21 tháng 12 năm 2009 lúc 7:37Dec 21, 2009 at 7:37
Jathanismjathanismjathanism
32.5K9 Huy hiệu vàng68 Huy hiệu bạc86 Huy hiệu Đồng9 gold badges68 silver badges86 bronze badges
Bạn sử dụng Tuples làm khóa khi bạn muốn hiển thị nhiều yếu tố tạo thành khóa cùng nhau.
Ví dụ:
hparams_hist = {}
hparams_hist[[0.001, 0.7, 5]] = weight_matrix1
hparams_hist[[0.0001, 0.8, 2]] = weight_matrix2
2Ở đây nếu chúng ta sử dụng riêng biệt
hparams_hist = {}
hparams_hist[[0.001, 0.7, 5]] = weight_matrix1
hparams_hist[[0.0001, 0.8, 2]] = weight_matrix2
3 hoặc hparams_hist = {}
hparams_hist[[0.001, 0.7, 5]] = weight_matrix1
hparams_hist[[0.0001, 0.8, 2]] = weight_matrix2
4, chúng ta sẽ không đại diện cho điểm đó.Đã trả lời ngày 30 tháng 5 năm 2016 lúc 4:09May 30, 2016 at 4:09
Ani Menonani MenonAni Menon
26.2K16 Huy hiệu vàng99 Huy hiệu bạc121 Huy hiệu đồng16 gold badges99 silver badges121 bronze badges
a[["John", "Doe"]] = "123 Fake Street"
Đã trả lời ngày 21 tháng 12 năm 2009 lúc 7:06Dec 21, 2009 at 7:06
Boris Gorelikboris Goreliktkerwin
28.4K37 Huy hiệu vàng126 Huy hiệu bạc169 Huy hiệu đồng1 gold badge30 silver badges46 bronze badges
Trong bối cảnh học máy và học sâu, nếu bạn đang thực hiện tìm kiếm HyperParameter cho các siêu âm tốt nhất, thì việc sử dụng Tuples làm khóa chắc chắn là siêu hữu ích.
Giả sử bạn đang tìm kiếm sự kết hợp siêu đồng tính tốt nhất cho ____10,
>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
File "", line 1, in
TypeError: list objects are unhashable
>>>
1 và >>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
File "", line 1, in
TypeError: list objects are unhashable
>>>
2.Sau đó, bạn có thể có một từ điển trong Python nơi bạn tạo ra sự kết hợp khác nhau mà các HPARAM này có thể lấy làm khóa và ma trận trọng lượng tương ứng của chúng từ thuật toán đào tạo làm giá trịDec 21, 2009 at 7:22
Những ma trận trọng lượng này là cần thiết hơn nữa để đưa ra dự đoán thời gian thực.Dustin
Đã trả lời ngày 18 tháng 11 năm 2017 lúc 16:4013 silver badges14 bronze badges
53.6K13 Huy hiệu vàng149 Huy hiệu bạc146 Huy hiệu đồng
Tôi sử dụng rất nhiều thời gian làm khóa
3, ví dụ:, counting how many people clicked the image3 after hovering on text2.>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
File "", line 1, in
TypeError: list objects are unhashable
>>>
funnels = defaultdict[int]
funnels[['hovered_text2', 'clicked_image3']] += 1
Tôi sử dụng chúng khi tôi phải tạo một khóa duy nhất từ nhiều giá trị, ví dụ:Jul 9, 2014 at 20:56
bit2pixelbit2pixelbit2pixel
Dựa trên
4, khóa >>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
File "", line 1, in
TypeError: list objects are unhashable
>>>
5 có thể là khóa = >>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
File "", line 1, in
TypeError: list objects are unhashable
>>>
6 nhưng cách tốt hơn là >>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
File "", line 1, in
TypeError: list objects are unhashable
>>>
7 vì8 silver badges8 bronze badges>>> d = {}
>>> t = [range[3], range[10, 13]]
>>> d[t] = 11
Traceback [most recent call last]:
File "", line 1, in
TypeError: list objects are unhashable
>>>
Nó dễ đọc hơn, ngắn hơn và ít tính toán hơn
Đã trả lời ngày 22 tháng 10 năm 2016 lúc 7:56Oct 22, 2016 at 7:56
def getHash[word]:
result={}
for i in range[len[word]]:
if word[i] in result:
result[word[i]]+=1
else :
result[word[i]]=1
return tuple [sorted[[result.items[]]]]
def groupAnagrams[words]:
resultHash={}
for i in range[len[words]]:
s=getHash[words[i].lower[]]
#print s
if s in resultHash :
l=list[resultHash[s]]
l.append[words[i]]
resultHash[s] = l # list[resultHash[s]].append[words[i]]
else :
resultHash[s]=[words[i]] # Creating list
return resultHash.values[]
Cramopy
3,4095 Huy hiệu vàng27 Huy hiệu bạc42 Huy hiệu đồng5 gold badges27 silver badges42 bronze badges
Đã trả lời ngày 6 tháng 5 năm 2016 lúc 17:42May 6, 2016 at 17:42
Tôi nghĩ rằng các bộ dữ liệu là các phím từ điển sẽ tốt, nếu chúng ta đang lưu trữ:-
Một số điểm trong hệ tọa độ.
Giúp gắn cờ vị trí của ma trận mà bạn muốn trong lần lặp tiếp theo. Ví dụ:-
6hparams_hist = {} hparams_hist[[0.001, 0.7, 5]] = weight_matrix1 hparams_hist[[0.0001, 0.8, 2]] = weight_matrix2
Đã trả lời ngày 14 tháng 2 lúc 0:33Feb 14 at 0:33
Giả sử từ điển chứa các đối tượng và nhãn hiệu của bạn. Nếu bạn có cùng điểm trong hai đối tượng để chúng ta có thể sử dụng tupple.
D = {}
D [['toán', 'lịch sử']] = 74
Đã trả lời ngày 2 tháng 10 lúc 10:31Oct 2 at 10:31
1