Hướng dẫn can a python dictionary key be a variable? - khóa từ điển python có thể là một biến không?

Có cách nào dễ dàng hơn để làm điều này trong Python [2.7] không ?: Lưu ý: Đây không phải là bất cứ điều gì lạ mắt, như đặt tất cả các biến cục bộ vào một từ điển. Chỉ những cái tôi chỉ định trong một danh sách.

apple = 1
banana = 'f'
carrot = 3
fruitdict = {}

# I want to set the key equal to variable name, and value equal to variable value
# is there a more Pythonic way to get {'apple': 1, 'banana': 'f', 'carrot': 3}?

for x in [apple, banana, carrot]:
    fruitdict[x] = x # [Won't work]

Hỏi ngày 19 tháng 10 năm 2010 lúc 21:21Oct 19, 2010 at 21:21

ATPATPatp

29,4K46 Huy hiệu vàng124 Huy hiệu bạc184 Huy hiệu đồng46 gold badges124 silver badges184 bronze badges

4

for i in ['apple', 'banana', 'carrot']:
    fruitdict[i] = locals[][i]

Đã trả lời ngày 19 tháng 10 năm 2010 lúc 21:33Oct 19, 2010 at 21:33

Tiến sĩ Jimbobd Jimbobdr jimbob

16.8K7 Huy hiệu vàng58 Huy hiệu bạc80 Huy hiệu Đồng7 gold badges58 silver badges80 bronze badges

5

Hàm

for i in ['apple', 'banana', 'carrot']:
    fruitdict[i] = locals[][i]
4 trả về một từ điển chứa tất cả các biến toàn cầu của bạn.

>>> apple = 1
>>> banana = 'f'
>>> carrot = 3
>>> globals[]
{'carrot': 3, 'apple': 1, '__builtins__': , '__name__': '__main__', '__doc__': None, 'banana': 'f'}

Ngoài ra còn có một chức năng tương tự gọi là

for i in ['apple', 'banana', 'carrot']:
    fruitdict[i] = locals[][i]
5.

Tôi nhận ra đây có lẽ không chính xác những gì bạn muốn, nhưng nó có thể cung cấp một số cái nhìn sâu sắc về cách Python cung cấp quyền truy cập vào các biến của bạn.

Chỉnh sửa: Có vẻ như vấn đề của bạn có thể được giải quyết tốt hơn bằng cách sử dụng từ điển ngay từ đầu:: It sounds like your problem may be better solved by simply using a dictionary in the first place:

fruitdict = {}
fruitdict['apple'] = 1
fruitdict['banana'] = 'f'
fruitdict['carrot'] = 3

Đã trả lời ngày 19 tháng 10 năm 2010 lúc 21:27Oct 19, 2010 at 21:27

Greg Hewgillgreg HewgillGreg Hewgill

917K178 Huy hiệu vàng1133 Huy hiệu bạc1267 Huy hiệu đồng178 gold badges1133 silver badges1267 bronze badges

2

Một lớp lót là:-

fruitdict = dict[zip[['apple','banana','carrot'], [1,'f', '3']]

Đã trả lời ngày 19 tháng 10 năm 2010 lúc 21:29Oct 19, 2010 at 21:29

DantaliondantalionDantalion

3231 Huy hiệu vàng2 Huy hiệu bạc7 Huy hiệu đồng1 gold badge2 silver badges7 bronze badges

1

Đây là một dòng, mà không phải gõ lại bất kỳ biến nào hoặc giá trị của chúng:

fruitdict.update[{k:v for k,v in locals[].copy[].iteritems[] if k[:2] != '__' and k != 'fruitdict'}]

Đã trả lời ngày 18 tháng 10 năm 2016 lúc 18:22Oct 18, 2016 at 18:22

Vâng, đây là một chút, umm ... không pythonic ... xấu xí ... hackish ...

Dưới đây là một đoạn mã giả định rằng bạn muốn tạo một từ điển của tất cả các biến cục bộ bạn tạo sau khi một điểm kiểm tra cụ thể được thực hiện:

checkpoint = [ 'checkpoint' ] + locals[].keys[][:]
## Various local assigments here ...
var_keys_since_checkpoint = set[locals[].keys[]] - set[checkpoint]
new_vars = dict[]
for each in var_keys_since_checkpoint:
   new_vars[each] = locals[][each]

Lưu ý rằng chúng tôi rõ ràng thêm khóa 'điểm kiểm tra' vào việc bắt giữ

for i in ['apple', 'banana', 'carrot']:
    fruitdict[i] = locals[][i]
6 của chúng tôi, tôi cũng nhận được một lát cắt đó mặc dù không cần thiết trong trường hợp này vì tham chiếu phải được làm phẳng để thêm nó vào [' Danh sách điểm kiểm tra ']. Tuy nhiên, nếu bạn đang sử dụng một biến thể của mã này và đã cố gắng tắt các ____ ____ 17Locals [] ________ 18Locals []. Các khóa [] `có giá trị sẽ thay đổi khi bạn thêm biến.

Tôi không thể nghĩ ra một cách để gọi một cái gì đó như

for i in ['apple', 'banana', 'carrot']:
    fruitdict[i] = locals[][i]
9 với danh sách các khóa cần thêm/cập nhật. Vì vậy, vòng lặp ____ là di động nhất. Tôi cho rằng một sự hiểu biết từ điển có thể được sử dụng trong các phiên bản Python gần đây hơn. Tuy nhiên, woudl dường như không có gì khác hơn là một vòng golf.

Đã trả lời ngày 19 tháng 10 năm 2010 lúc 22:02Oct 19, 2010 at 22:02

Jim Dennisjim DennisJim Dennis

16.7K11 Huy hiệu vàng64 Huy hiệu bạc114 Huy hiệu đồng11 gold badges64 silver badges114 bronze badges

Dựa trên câu trả lời của Mouad, đây là một cách pythonic hơn để chọn các biến dựa trên tiền tố:

# All the vars that I want to get start with fruit_
fruit_apple = 1
fruit_carrot = 'f'
rotten = 666

prefix = 'fruit_'
sourcedict = locals[]
fruitdict = { v[len[prefix]:] : sourcedict[v]
              for v in sourcedict
              if v.startswith[prefix] }
# fruitdict = {'carrot': 'f', 'apple': 1}

Bạn thậm chí có thể đặt nó vào một chức năng với tiền tố và nguồn gốc làm đối số.

Đã trả lời ngày 7 tháng 5 năm 2014 lúc 10:58May 7, 2014 at 10:58

ArnoutarnoutArnout

2.79118 Huy hiệu bạc23 Huy hiệu đồng18 silver badges23 bronze badges

Câu hỏi này thực tế đã được trả lời, nhưng tôi chỉ muốn nói rằng thật buồn cười khi bạn nói

Đây không phải là bất cứ điều gì lạ mắt, như đặt tất cả các biến cục bộ vào một từ điển.

Bởi vì nó thực sự là "fancier"

Những gì bạn muốn là:

apple = 1
banana = 'f'
carrot = 3
fruitdict = {}

# I want to set the key equal to variable name, and value equal to variable value
# is there a more Pythonic way to get {'apple': 1, 'banana': 'f', 'carrot': 3}?

names= 'apple banana carrot'.split[] # I'm just being lazy for this post
items = globals[]                    # or locals[]

for name in names:
    fruitdict[name] = items[name]

Thành thật mà nói, những gì bạn đang làm chỉ là sao chép các mục từ từ điển này sang từ điển khác.

[Greg Hewgill thực tế đã đưa ra toàn bộ câu trả lời, tôi vừa hoàn thành nó]

... Và giống như mọi người đề xuất, có lẽ bạn nên đặt những thứ này vào từ điển ngay từ đầu, nhưng tôi sẽ cho rằng vì một lý do nào đó bạn không thể

Đã trả lời ngày 20 tháng 10 năm 2010 lúc 0:36Oct 20, 2010 at 0:36

3

Tại sao bạn không làm điều ngược lại:

fruitdict = { 
      'apple':1,
      'banana':'f',
      'carrot':3,
}

locals[].update[fruitdict]

Cập nhật :

Không sử dụng mã ở trên Kiểm tra nhận xét.

Nhân tiện tại sao bạn không đánh dấu các vars mà bạn muốn nhận được tôi không biết có thể như thế này:

for i in ['apple', 'banana', 'carrot']:
    fruitdict[i] = locals[][i]
0

Đã trả lời ngày 19 tháng 10 năm 2010 lúc 21:47Oct 19, 2010 at 21:47

Mouadmouadmouad

65.4K18 Huy hiệu vàng113 Huy hiệu bạc105 Huy hiệu đồng18 gold badges113 silver badges105 bronze badges

4

Try:

for i in ['apple', 'banana', 'carrot']:
    fruitdict[i] = locals[][i]
1

Lucas

6.4894 Huy hiệu vàng28 Huy hiệu bạc44 Huy hiệu đồng4 gold badges28 silver badges44 bronze badges

Đã trả lời ngày 19 tháng 9 năm 2018 lúc 2:46Sep 19, 2018 at 2:46

1

Không phải là giải pháp thanh lịch nhất và chỉ hoạt động 90% thời gian:

for i in ['apple', 'banana', 'carrot']:
    fruitdict[i] = locals[][i]
2

Bạn sẽ gặp sự cố nếu bạn lưu trữ cùng một tham chiếu trong nhiều biến, nhưng cũng nếu nhiều biến lưu trữ cùng một int nhỏ, vì chúng được thực tập.

Đã trả lời ngày 17 tháng 5 năm 2020 lúc 20:14May 17, 2020 at 20:14

for i in ['apple', 'banana', 'carrot']:
    fruitdict[i] = locals[][i]
3

Worked.

Đã trả lời ngày 21 tháng 1 năm 2013 lúc 0:26Jan 21, 2013 at 0:26

user1734291user1734291user1734291

71 Huy hiệu vàng2 Huy hiệu bạc6 Huy hiệu đồng1 gold badge2 silver badges6 bronze badges

1

Bạn có thể sử dụng một biến làm khóa từ điển không?

Sử dụng dấu ngoặc vuông để truy cập khóa từ điển bằng cách sử dụng một biến, ví dụ: my_dict [biến]. Nếu biến là một số nguyên và các phím của từ điển là các chuỗi, hãy chuyển đổi biến thành một chuỗi khi truy cập khóa, ví dụ: my_dict [str [biến]]., e.g. my_dict[variable] . If the variable is an integer and the dictionary's keys are strings, convert the variable to a string when accessing a key, e.g. my_dict[str[variable]] .

Khóa từ điển Python có thể là một số nguyên không?

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.you can use an integer, float, string, or Boolean as a dictionary key. However, neither a list nor another dictionary can serve as a dictionary key, because lists and dictionaries are mutable.

Một khóa và giá trị từ điển có thể giống nhau không?

Không, mỗi khóa trong một từ điển phải là duy nhất.Bạn không thể có hai khóa có cùng giá trị.Cố gắng sử dụng cùng một khóa sẽ chỉ ghi đè lên giá trị trước đó được lưu trữ.Nếu một khóa cần lưu trữ nhiều giá trị, thì giá trị được liên kết với khóa phải là danh sách hoặc từ điển khác.You can't have two keys with the same value. Attempting to use the same key again will just overwrite the previous value stored. If a key needs to store multiple values, then the value associated with the key should be a list or another dictionary.

Cái nào trong số này không ổn như một khóa từ điển?

Chúng ta có thể sử dụng số nguyên, chuỗi, bộ dữ liệu làm khóa từ điển nhưng không thể sử dụng danh sách làm khóa của nó.list as a key of it .

Bài Viết Liên Quan

Chủ Đề