PYTHON dagi katalog sifatida foydalaning

Shuning uchun ['test', 'testtwo'] kabi bir qator bor.

Men buni myDict ['test'] ['testtwo'] kabi bir lug'at uchun indeks sifatida ishlatishni xohlayman.

Pythonda bu mumkinmi? Qisqa tushuntirish uchun uzr so'rayman.

EDIT:

exampleDict = {
  'test': {
    'testtwo': [
      '',
      ''
    ]
  }
}

Pythonda ba'zi narsalarni qilayotganda ['test', 'testtwo'] qatori bilan yakunlanadi va exampleDict ['test'] ['testtwo' ] . Klavishlar bo'lsa ham o'zgaradi va qatordagi tugmalar soni ham o'zgaradi.

0
Namunaviy lug'atlarni ko'rsatish mumkinmi?
qo'shib qo'ydi muallif Moses Koledoye, manba
Namunaviy lug'atlarni ko'rsatish mumkinmi?
qo'shib qo'ydi muallif Moses Koledoye, manba
Siz erishmoqchi bo'lgan narsalarning eng katta tasviri nima? lug'at qidirayotgan narsangiz bo'lishi mumkin
qo'shib qo'ydi muallif Gilad Green, manba
Siz erishmoqchi bo'lgan narsalarning eng katta tasviri nima? lug'at qidirayotgan narsangiz bo'lishi mumkin
qo'shib qo'ydi muallif Gilad Green, manba
Buning ma'nosi: python dict
qo'shib qo'ydi muallif felipsmartins, manba
Buning ma'nosi: python dict
qo'shib qo'ydi muallif felipsmartins, manba
demoqchimisiz: __ list = ['test', 'testtwo']; mydict = {__list: "foo"} ?
qo'shib qo'ydi muallif felipsmartins, manba
demoqchimisiz: __ list = ['test', 'testtwo']; mydict = {__list: "foo"} ?
qo'shib qo'ydi muallif felipsmartins, manba
@MosesKoledoye qo'shildi.
qo'shib qo'ydi muallif Matt Cowley, manba
@MosesKoledoye qo'shildi.
qo'shib qo'ydi muallif Matt Cowley, manba
@MosesKoledoye qo'shildi.
qo'shib qo'ydi muallif Matt Cowley, manba
Ha, afsuski, ikkalasi ham lug'atni nazarda tutganman: /
qo'shib qo'ydi muallif Matt Cowley, manba
Ha, afsuski, ikkalasi ham lug'atni nazarda tutganman: /
qo'shib qo'ydi muallif Matt Cowley, manba

6 javoblar

Ro'yxatdagi indekslarni yechib olish va "joriy" dictni yangilab turishingiz mumkin:

>>> exampleDict = {'test': {'testtwo': [ '', '']}}
>>> d = exampleDict                               
>>> for x in idx:
...     d = d[x]
>>> d
['', '']

Yoki hatto reduce dan foydalanishingiz mumkin functools.reduce ning Python 3):

>>> reduce(lambda d, x: d[x], idx, exampleDict)
['', '']

Dictni yangilash uchun shunga o'xshash yondashuvni ishlatishingiz mumkin, lekin 1) indekslar ro'yxatining bir qismi dictda yo'q bo'lsa va siz 2) oxirgi elementni o'chirib qo'yishingiz kerak bo'lsa, 1) siz setdefault ro'yxatidan qaytarib yuborilgan va qaytarilgan lug'atga muntazam indeks sifatida ishlatilgan.

>>> idx2 = ['test', 'testthree', 'four']
>>> reduce(lambda d, x: d.setdefault(x, {}), idx2[:-1], exampleDict)[idx2[-1]] = "foo"
>>> exampleDict
{'test': {'testthree': {'four': 'foo'}, 'testtwo': ['', '']}}

Python-3da bu qatorni * bilan ochishdan foydalanishni biroz osonroq qilishingiz mumkin:

>>> *path, last = idx2
>>> reduce(lambda d, x: d.setdefault(x, {}), path, exampleDict)[last] = "foo"
2
qo'shib qo'ydi
Juda ko'p rahmat @ tobias_k oxirgi bit bir jozibasi kabi ishlaydi!
qo'shib qo'ydi muallif Matt Cowley, manba
Bu juda yaxshi ishlaydi, ammo asl lug'atni qanday yangilayman?
qo'shib qo'ydi muallif Matt Cowley, manba

Ro'yxatdagi indekslarni yechib olish va "joriy" dictni yangilab turishingiz mumkin:

>>> exampleDict = {'test': {'testtwo': [ '', '']}}
>>> d = exampleDict                               
>>> for x in idx:
...     d = d[x]
>>> d
['', '']

Yoki hatto reduce dan foydalanishingiz mumkin functools.reduce ning Python 3):

>>> reduce(lambda d, x: d[x], idx, exampleDict)
['', '']

Dictni yangilash uchun shunga o'xshash yondashuvni ishlatishingiz mumkin, lekin 1) indekslar ro'yxatining bir qismi dictda yo'q bo'lsa va siz 2) oxirgi elementni o'chirib qo'yishingiz kerak bo'lsa, 1) siz setdefault ro'yxatidan qaytarib yuborilgan va qaytarilgan lug'atga muntazam indeks sifatida ishlatilgan.

>>> idx2 = ['test', 'testthree', 'four']
>>> reduce(lambda d, x: d.setdefault(x, {}), idx2[:-1], exampleDict)[idx2[-1]] = "foo"
>>> exampleDict
{'test': {'testthree': {'four': 'foo'}, 'testtwo': ['', '']}}

Python-3da bu qatorni * bilan ochishdan foydalanishni biroz osonroq qilishingiz mumkin:

>>> *path, last = idx2
>>> reduce(lambda d, x: d.setdefault(x, {}), path, exampleDict)[last] = "foo"
2
qo'shib qo'ydi
Juda ko'p rahmat @ tobias_k oxirgi bit bir jozibasi kabi ishlaydi!
qo'shib qo'ydi muallif Matt Cowley, manba
Bu juda yaxshi ishlaydi, ammo asl lug'atni qanday yangilayman?
qo'shib qo'ydi muallif Matt Cowley, manba

Ro'yxatdagi indekslarni yechib olish va "joriy" dictni yangilab turishingiz mumkin:

>>> exampleDict = {'test': {'testtwo': [ '', '']}}
>>> d = exampleDict                               
>>> for x in idx:
...     d = d[x]
>>> d
['', '']

Yoki hatto reduce dan foydalanishingiz mumkin functools.reduce ning Python 3):

>>> reduce(lambda d, x: d[x], idx, exampleDict)
['', '']

Dictni yangilash uchun shunga o'xshash yondashuvni ishlatishingiz mumkin, lekin 1) indekslar ro'yxatining bir qismi dictda yo'q bo'lsa va siz 2) oxirgi elementni o'chirib qo'yishingiz kerak bo'lsa, 1) siz setdefault ro'yxatidan qaytarib yuborilgan va qaytarilgan lug'atga muntazam indeks sifatida ishlatilgan.

>>> idx2 = ['test', 'testthree', 'four']
>>> reduce(lambda d, x: d.setdefault(x, {}), idx2[:-1], exampleDict)[idx2[-1]] = "foo"
>>> exampleDict
{'test': {'testthree': {'four': 'foo'}, 'testtwo': ['', '']}}

Python-3da bu qatorni * bilan ochishdan foydalanishni biroz osonroq qilishingiz mumkin:

>>> *path, last = idx2
>>> reduce(lambda d, x: d.setdefault(x, {}), path, exampleDict)[last] = "foo"
2
qo'shib qo'ydi
Juda ko'p rahmat @ tobias_k oxirgi bit bir jozibasi kabi ishlaydi!
qo'shib qo'ydi muallif Matt Cowley, manba
Bu juda yaxshi ishlaydi, ammo asl lug'atni qanday yangilayman?
qo'shib qo'ydi muallif Matt Cowley, manba

Lug'at kalitlari ro'yxatini o'zgartira olmaysiz, chunki ro'yxatlar o'zgarishi mumkin va o'zgaruvchan kalitlarga ruxsat berilmaydi, lekin siz istagan narsalar ro'yxatning har bir elementini indeks sifatida ishlatishdir deb o'ylayman. Boshqa mazmunsiz, to'g'ri tekshiruvlarsiz bu yaxshi fikrmi, yo'qmi, degani emas:

my_list = ['a', 'b']
my_dict[my_list[0]][my_list[1]] # access at ['a']['b']

Men hal qilmoqchi bo'lgan muammoni boshqacha hal qilish mumkinligini his qilaman.

2
qo'shib qo'ydi
@MattCowley O'ngda, lekin namuna uchun ro'yxatni qattiq kodladim. Siz lug'atingizni lug'atingizni oldindan to'ldirishingiz kerak bo'ladi, shuning uchun lug'atga kirish uchun kalitlar amal qiladi. Qo'shimcha ma'lumotni berishdan oldin mening javobimni yozdim. tobias_k ning javobi men ta'riflagan lug'at yangilanishlari uchun yaxshi ko'rinadi.
qo'shib qo'ydi muallif synchronizer, manba
Bu kabi, lekin my_list ning kalitlari soni o'zgaradi, shuning uchun siz ikkinchi satrda qilganingizdek, uni qo'l bilan yozisholmayman.
qo'shib qo'ydi muallif Matt Cowley, manba

Lug'at kalitlari ro'yxatini o'zgartira olmaysiz, chunki ro'yxatlar o'zgarishi mumkin va o'zgaruvchan kalitlarga ruxsat berilmaydi, lekin siz istagan narsalar ro'yxatning har bir elementini indeks sifatida ishlatishdir deb o'ylayman. Boshqa mazmunsiz, to'g'ri tekshiruvlarsiz bu yaxshi fikrmi, yo'qmi, degani emas:

my_list = ['a', 'b']
my_dict[my_list[0]][my_list[1]] # access at ['a']['b']

Men hal qilmoqchi bo'lgan muammoni boshqacha hal qilish mumkinligini his qilaman.

2
qo'shib qo'ydi
@MattCowley O'ngda, lekin namuna uchun ro'yxatni qattiq kodladim. Siz lug'atingizni lug'atingizni oldindan to'ldirishingiz kerak bo'ladi, shuning uchun lug'atga kirish uchun kalitlar amal qiladi. Qo'shimcha ma'lumotni berishdan oldin mening javobimni yozdim. tobias_k ning javobi men ta'riflagan lug'at yangilanishlari uchun yaxshi ko'rinadi.
qo'shib qo'ydi muallif synchronizer, manba
Bu kabi, lekin my_list ning kalitlari soni o'zgaradi, shuning uchun siz ikkinchi satrda qilganingizdek, uni qo'l bilan yozisholmayman.
qo'shib qo'ydi muallif Matt Cowley, manba

Lug'at kalitlari ro'yxatini o'zgartira olmaysiz, chunki ro'yxatlar o'zgarishi mumkin va o'zgaruvchan kalitlarga ruxsat berilmaydi, lekin siz istagan narsalar ro'yxatning har bir elementini indeks sifatida ishlatishdir deb o'ylayman. Boshqa mazmunsiz, to'g'ri tekshiruvlarsiz bu yaxshi fikrmi, yo'qmi, degani emas:

my_list = ['a', 'b']
my_dict[my_list[0]][my_list[1]] # access at ['a']['b']

Men hal qilmoqchi bo'lgan muammoni boshqacha hal qilish mumkinligini his qilaman.

2
qo'shib qo'ydi
@MattCowley O'ngda, lekin namuna uchun ro'yxatni qattiq kodladim. Siz lug'atingizni lug'atingizni oldindan to'ldirishingiz kerak bo'ladi, shuning uchun lug'atga kirish uchun kalitlar amal qiladi. Qo'shimcha ma'lumotni berishdan oldin mening javobimni yozdim. tobias_k ning javobi men ta'riflagan lug'at yangilanishlari uchun yaxshi ko'rinadi.
qo'shib qo'ydi muallif synchronizer, manba
Bu kabi, lekin my_list ning kalitlari soni o'zgaradi, shuning uchun siz ikkinchi satrda qilganingizdek, uni qo'l bilan yozisholmayman.
qo'shib qo'ydi muallif Matt Cowley, manba
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming