Skip to main content

add reference for dict in python using formatted string

Project description

refdict

在Python使用refdict更好地组织与访问数据

兼容dict/list/tuple/str!

Install

pip install refdict

Usage

在字符串值前面加上引用前缀使其变成另一个对象的引用。默认的引用前缀是@。可以在构造函数中传入参数refPrefix来改变引用前缀

[]运算符中使用一个字符串实现refdict内容的链式访问。使用.作为多个key的连接符。可以在构造函数传入参数separator来改变分隔符

data = {
	'player': {
		'name': 'DiscreteTom',
		'items': [
			'@apple',
			'@potion.red'
		],
		'weapon': '@sword',
		'attack': '@player.weapon.attack',
		'me': '@player'
	},
	'apple': 'restore your health by 10%',
	'potion': {
		'red': 'restore your health by 20%',
	},
	'sword': {
		'attack': 123,
		'value': 50
	},
}
rd = refdict(data)
print(rd['player.items.1']) # => restore your health by 20%
print(rd['player.attack']) # => 123
rd['player.items.1'] = 'empty'
print(rd['player.items.1']) # => empty
print(rd['player.items.:.1']) # => empty
rd['player.items.:'] = []
print(rd['player.items']) # => []
print(rd.text('player.me.attack')) # => @player.weapon.attack

Features

  • 能够像使用dict/list/tuple/str一样使用refdict
    • 能够调用对应类型的函数,如refdict({}).keys()refdict([]).append(123)
    • 迭代与成员判断for x in refdict([1, 2, 3])
    • 切片与切片赋值refdict([1, 2, 3])[:] => [1, 2, 3]
    • ...
  • 能够通过一个字符串链式访问内部成员
    • refdict({'1':{'1':{'1':{'1':'1'}}}})['1.1.1.1'] => 1
  • 能够通过引用字符串实现对象与对象之间的互相引用

Warnings

使用形如item: @item递归引用会导致死循环,包括间接递归引用

data = {
	'item': '@item', # => infinite loop!
	'wrapper': {
		'item': '@wrapper.item' # => infinite loop!
	},
	'a': '@b' # => infinite loop!
	'b': '@a' # => infinite loop!
}

FAQ

  • Q - 为什么我用1作为下标访问不到list/tuple/str的第一个元素?
    • A - 和python一样,下标从0开始计数。虽然用起来有时候感觉有些反直觉,但是是合理的
  • Q - 为什么我不能像refdict[1][2][3]这样使用引用的特性?
    • A - 引用解析仅限于第一个[],第一个[]会返回一个正常的tuple/list/dict/str而不是一个refdict对象,所以后面的操作无法使用引用特性

Change Log

v2.2.0

  • __contains__支持链式访问特性
    • 'player.weapon.attack' in rd会返回True

v2.1.0

  • 可以调用根数据类型的非内置函数
    • 比如refdict({})可以使用dictkeys函数,refdict([])可以使用listappend函数
  • []运算的参数keys添加int类型和slice类型的支持,以便更好地访问list/tuple/str。目前参数keys仅支持strintslice三种类型
  • 实现__contains__
  • 实现__str__以便输出
  • 实现__delitem__以使用引用解析来删除元素

v2.0.0

改名。还是小写看起来舒服。但是不向前兼容了所以就用2.0.0的版本号好了

v1.0.0

  • 实现基本的[]取值与赋值
  • 实现text函数以获得字面值

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

refdict-2.2.0.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

refdict-2.2.0-py3-none-any.whl (16.6 kB view details)

Uploaded Python 3

File details

Details for the file refdict-2.2.0.tar.gz.

File metadata

  • Download URL: refdict-2.2.0.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.0

File hashes

Hashes for refdict-2.2.0.tar.gz
Algorithm Hash digest
SHA256 32d14af612bd56558fa4168f567bc01195b9a3fe3ba90c23a6ebea191a6ab16e
MD5 ff9d51c6eb18624bc312602c2e7dfce1
BLAKE2b-256 2bd0adf524df0a4488e972d9b875d16bd53f9edacb29ea812f45823ce080fda9

See more details on using hashes here.

File details

Details for the file refdict-2.2.0-py3-none-any.whl.

File metadata

  • Download URL: refdict-2.2.0-py3-none-any.whl
  • Upload date:
  • Size: 16.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/39.0.1 requests-toolbelt/0.9.1 tqdm/4.32.1 CPython/3.7.0

File hashes

Hashes for refdict-2.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 074a4db0e856d88dac8e98ea7847fc996561d551f00b2d83fb6ab03effbf05c8
MD5 a5c68c88dec60766847118821da95ee7
BLAKE2b-256 2bd6cec12eb6bd2afd21d0ae74e44a0697b248581a205fe15143041f5c1bdc04

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page