私は非常にPythonに慣れ親しんでいました。私の属性テーブルのフィールドをデコードし、対応する値を追加する関数(下の辞書から)空白のフィールドに入力します。 (Excelのvlookupに似ています)。たとえば、 'e1'が自分の属性テーブルに現れると、辞書の中の 'e'を検索し、辞書に対応する値を見つけてそれをリストに出力し、 '1'を検索して同じリストに出力しますブランクフィールドは既に属性テーブルに追加されています)。次に、このリストを属性テーブルの空白のフィールドに追加します。ArcGISのPython - 辞書の値を検索し、対応する値を新しいフィールドに出力する
0
A
答えて
1
この時点であなたのデータ構造はあなたの友人ではありません。
あなたは、ネストされた辞書構造に積み上げ、このすべての情報を持っているが、あなたが最初にそれをデコードしたほうが良いでしょう:
#!python3
import collections
import itertools
LUC_dict = {
'estu':'Estuaries',
'ice':'Ice',
'lake':'Lake',
'quar':'Quarries/Mines',
'rive':'River',
'town':'Town/Urban',
'Class':{'1':'Arable (1)',
'2':'Arable (2)',
'3':'Arable (3)',
'4':'Arable (4)',
'5':'Non Arable (5)',
'6':'Non Arable (6)',
'7':'Non Arable (7)',
'8':'Protected (8)'},
'Subclass':{'c':'Climiate',
'e': 'Erosion',
's': 'Soil',
'w': 'Wetness'}}
field1_value = {k:v for k,v in LUC_dict.items() if k not in ('Class','Subclass')}
field2_value = collections.defaultdict(str)
classes = LUC_dict['Class']
subclasses = LUC_dict['Subclass']
for c,sc in itertools.product(classes.keys(), subclasses.keys()):
field1_value[c+sc] = classes[c]
field2_value[c+sc] = subclasses[sc]
def decode(instr):
return field1_value[instr], field2_value[instr]
tests = "6e 4s rive 2s estu"
for test in tests.split():
f1, f2 = decode(test)
print("{}: [{}, {}]".format(test, f1, f2))
これからの出力は次のようになります。
I6e: [Non Arable (6), Erosion]
4s: [Arable (4), Soil]
rive: [River, ]
2s: [Arable (2), Soil]
estu: [Estuaries, ]
あなたが念頭に置いていることを考えてください。
1
これはトリックですか?分かりやすくするために、擬似コードの直後に私のソリューションをモデル化しようとしました。
def decode_LUC(input_string, LUC_dict): # Changed signature to also accept the dict (keep parameter local to function)
if not input_string.isalnum(): # Check if alphanumeric
raise ValueError("Input string is not alphanumeric!")
elif len(input_string) == 2: # Split if we have len 2
part1, part2 = input_string[0], input_string[1] # Split into two strings
return [LUC_dict["Class"][part1], LUC_dict["Subclass"][part2]]
else: # Else try to directly access dict
return LUC_dict[input_string]
LUC_dict = {
'estu':'Estuaries',
'ice':'Ice',
'lake':'Lake',
'quar':'Quarries/Mines',
'rive':'River',
'town':'Town/Urban',
'Class':{'1':'Arable (1)',
'2':'Arable (2)',
'3':'Arable (3)',
'4':'Arable (4)',
'5':'Non Arable (5)',
'6':'Non Arable (6)',
'7':'Non Arable (7)',
'8':'Protected (8)'},
'Subclass':{'c':'Climiate',
'e': 'Erosion',
's': 'Soil',
'w': 'Wetness'}}
# If you're in Python3, wrap the print statements with parens
print decode_LUC("6e", LUC_dict) # Prints ['Non Arable (6)', 'Erosion']
print decode_LUC("estu", LUC_dict) # Prints Estuaries
print decode_LUC("e^", LUC_dict) # Raises a value error
関連する問題
- 1. python辞書の最大値に対応するキー
- 2. 辞書の最大値を検索するパフォーマンス対numpy配列
- 3. 辞書の配列内の辞書の値を検索する
- 4. Python辞書のすべての固有値を出力する
- 5. 辞書/データベースのキー値検索
- 6. Pythonの辞書で値をキーで検索
- 7. 値のタイプと辞書の検索
- 8. 辞書からの値で属性テーブルのフィールドを更新する - Python
- 9. Pythonで辞書を検索する
- 10. 配列内の値を持つPython辞書をCSVファイルに出力する。
- 11. 新しいpythonファイルの辞書としてデータを出力します
- 12. 辞書で値を検索しますか?
- 13. Python辞書の値を辞書の他の値に隣接して変更する
- 14. Pythonで辞書を検索してソートする
- 15. 他のセルにあるオプションに対応するExcelセルの値を検索
- 16. Pythonのリストに対応するディクショナリキー値の繰り返し
- 17. 辞書に含まれる辞書の値を変更する
- 18. Lucene - 数値フィールドを検索する
- 19. 従来のASP。新しいキーと値を辞書に表示
- 20. Python辞書 - 新しい値が以前の値を上書きしないようにするにはどうすればいいですか?
- 21. 列値に対する全文検索?
- 22. 辞書のキーをインデックス値で検索するにはどうしたらいいですか?
- 23. 辞書のメモリ消費:値を設定しない対アイテムを削除する
- 24. Pythonで辞書の値を取り出す方法は?
- 25. その値に応じて辞書のリストに辞書を変換
- 26. キーで辞書がリストに対応するときの最初の値の集計(Python)
- 27. Python辞書の曖昧なキー検索
- 28. ウェブブラウザの入力フィールドで辞書検索を無効にするにはどうすればよいですか?
- 29. Pythonの他の辞書の値で辞書をソート
- 30. Tensorflow辞書テンソルでの辞書検索