Note: This documentation is for older version of listorm as 0.x.x
View documentation of listorm after version 1.0
Installation of older version
pip install listorm==0.2.16
import listorm as ls
1-1. Basic useage - create a Listorm Object
1)Listorm Ojbect is derived from list
2)The Elements of Listorm Object is 'Scheme' derived from dict
scheme1 = ls.Scheme({'name': 'park', 'age': 15, 'phone':None})
scheme2 = ls.Scheme({'name': 'kim', 'age':5, 'location': 'Seoul', 'phone': '111-222-333'})
# if add operating smart overwrite (overwrite if value is none on Same key)
scheme1+scheme2
{'age': 15, 'location': 'Seoul', 'name': 'park', 'phone': '111-222-333'}
# The List within different key of dict
lst = [
{'name': 'Hong', 'age': 18, 'location': 'Korea'},
{'name': 'Yuki', 'age': 19,},
{'name': 'Lee', 'age': 12, 'phone': '010-2451-1532'},
]
# Auto normailize: set same keys for each record(set to None if key does not exists)
ls.Listorm(lst)
[{'age': 18, 'location': 'Korea', 'name': 'Hong', 'phone': None},
{'age': 19, 'location': None, 'name': 'Yuki', 'phone': None},
{'age': 12, 'location': None, 'name': 'Lee', 'phone': '010-2451-1532'}]
1-2. Basic useage - retrieve and parsing data
# Customer's info in a Shopping mall
userTable = [
{'name': 'Hong', 'gender': 'M', 'age': 18, 'location': 'Korea'},
{'name': 'Charse', 'gender': 'M', 'age': 19, 'location': 'USA'},
{'name': 'Lyn', 'gender': 'F', 'age': 28, 'location': 'China'},
{'name': 'Xiaomi', 'gender': 'M', 'age': 15, 'location': 'China'},
{'name': 'Park', 'gender': 'M', 'age': 29, 'location': 'Korea'},
{'name': 'Smith', 'gender': 'M', 'age': 17, 'location': 'USA'},
{'name': 'Lee', 'gender': 'F', 'age': 12, 'location': 'Korea'},
]
#select Columns
lst_customer = ls.Listorm(userTable)
lst_customer.select('name', 'location')
[{'location': 'Korea', 'name': 'Hong'},
{'location': 'USA', 'name': 'Charse'},
{'location': 'China', 'name': 'Lyn'},
{'location': 'China', 'name': 'Xiaomi'},
{'location': 'Japan', 'name': 'Yuki'},
{'location': 'Korea', 'name': 'Park'},
{'location': 'USA', 'name': 'Smith'},
{'location': 'Korea', 'name': 'Lee'}]
#select Columns only with values, 2dArry
lst_customer = ls.Listorm(userTable)
lst_customer.select('name', 'location', values=True)
[('Hong', 'Korea'),
('Charse', 'USA'),
('Lyn', 'China'),
('Xiaomi', 'China'),
('Yuki', 'Japan'),
('Park', 'Korea'),
('Smith', 'USA'),
('Lee', 'Korea')]
#select Columns only with values, Similar to select(*args, values=True)
lst_customer = ls.Listorm(userTable)
lst_customer.row_values('name', 'location')
[['Hong', 'Korea'],
['Charse', 'USA'],
['Lyn', 'China'],
['Xiaomi', 'China'],
['Yuki', 'Japan'],
['Park', 'Korea'],
['Smith', 'USA'],
['Lee', 'Korea']]
#filtering
lst_customer = ls.Listorm(userTable)
lst_customer.filter(where=lambda row:row.age > 18)
[{'age': 19, 'gender': 'M', 'location': 'USA', 'name': 'Charse'},
{'age': 28, 'gender': 'F', 'location': 'China', 'name': 'Lyn'},
{'age': 19, 'gender': 'F', 'location': 'Japan', 'name': 'Yuki'},
{'age': 29, 'gender': 'M', 'location': 'Korea', 'name': 'Park'}]
# With Method Chaining
lst_customer = ls.Listorm(userTable)
lst_customer.select('name', 'location', 'age').filter(where=lambda row:row['age'] > 18)
[{'age': 19, 'location': 'USA', 'name': 'Charse'},
{'age': 28, 'location': 'China', 'name': 'Lyn'},
{'age': 19, 'location': 'Japan', 'name': 'Yuki'},
{'age': 29, 'location': 'Korea', 'name': 'Park'}]
# Get a Column values
lst_customer = ls.Listorm(userTable)
lst_customer.column_values('age')
[18, 19, 28, 15, 19, 29, 17, 12]
# Get a Column values unique
lst_customer = ls.Listorm(userTable)
lst_customer.unique('location')
{'China', 'Japan', 'Korea', 'USA'}
# Get a Column values count
lst_customer = ls.Listorm(userTable)
lst_customer.value_count('location')
Counter({'China': 2, 'Japan': 1, 'Korea': 3, 'USA': 2})
- Basic useage - modifying and update data
# change number type
numbers = [
{'flt': 0.5, 'string': '123', 'string_float': '123.5',
'int': 412, 'string_int': '5123', 'blabla': 'what?'
}
]
lst_numbers = ls.Listorm(numbers)
# column name and example of types to change, if faild to change, example value will be default value
lst_numbers.set_number_type(flt='', string=0.0, string_float=0, int='', string_int=0, blabla=0)
[{'blabla': 0,
'flt': '0.5',
'int': '412',
'string': 123.0,
'string_float': 123,
'string_int': 5123}]
# modify by record qpplied function
lst_customer = ls.Listorm(userTable)
lst_customer.apply_row(
age= lambda row:'{}_{}'.format(row.gender, row.age),
name = lambda row:'{}_{}_{}'.format(row.gender, row.age, row.name),
)
[{'age': 'M_18', 'gender': 'M', 'location': 'Korea', 'name': 'M_M_18_Hong'},
{'age': 'M_19', 'gender': 'M', 'location': 'USA', 'name': 'M_M_19_Charse'},
{'age': 'F_28', 'gender': 'F', 'location': 'China', 'name': 'F_F_28_Lyn'},
{'age': 'M_15', 'gender': 'M', 'location': 'China', 'name': 'M_M_15_Xiaomi'},
{'age': 'F_19', 'gender': 'F', 'location': 'Japan', 'name': 'F_F_19_Yuki'},
{'age': 'M_29', 'gender': 'M', 'location': 'Korea', 'name': 'M_M_29_Park'},
{'age': 'M_17', 'gender': 'M', 'location': 'USA', 'name': 'M_M_17_Smith'},
{'age': 'F_12', 'gender': 'F', 'location': 'Korea', 'name': 'F_F_12_Lee'}]
# modify by value only applied function
lst_customer = ls.Listorm(userTable)
lst_customer.map(gender=lambda val:{'M':'Male', 'F':'Female'}.get(val, val))
[{'age': 18, 'gender': 'Male', 'location': 'Korea', 'name': 'Hong'},
{'age': 19, 'gender': 'Male', 'location': 'USA', 'name': 'Charse'},
{'age': 28, 'gender': 'Female', 'location': 'China', 'name': 'Lyn'},
{'age': 15, 'gender': 'Male', 'location': 'China', 'name': 'Xiaomi'},
{'age': 19, 'gender': 'Female', 'location': 'Japan', 'name': 'Yuki'},
{'age': 29, 'gender': 'Male', 'location': 'Korea', 'name': 'Park'},
{'age': 17, 'gender': 'Male', 'location': 'USA', 'name': 'Smith'},
{'age': 12, 'gender': 'Female', 'location': 'Korea', 'name': 'Lee'}]
# rename columns
lst_customer = ls.Listorm(userTable)
lst_customer.rename(name='who', location='nation')
[{'age': 18, 'gender': 'M', 'nation': 'Korea', 'who': 'Hong'},
{'age': 19, 'gender': 'M', 'nation': 'USA', 'who': 'Charse'},
{'age': 28, 'gender': 'F', 'nation': 'China', 'who': 'Lyn'},
{'age': 15, 'gender': 'M', 'nation': 'China', 'who': 'Xiaomi'},
{'age': 19, 'gender': 'F', 'nation': 'Japan', 'who': 'Yuki'},
{'age': 29, 'gender': 'M', 'nation': 'Korea', 'who': 'Park'},
{'age': 17, 'gender': 'M', 'nation': 'USA', 'who': 'Smith'},
{'age': 12, 'gender': 'F', 'nation': 'Korea', 'who': 'Lee'}]
# adding new columns by record applied function
lst_customer = ls.Listorm(userTable)
lst_customer.add_columns(is_child=lambda row:row.age<15).select('name', 'age', 'is_child')
[{'age': 18, 'is_child': False, 'name': 'Hong'},
{'age': 19, 'is_child': False, 'name': 'Charse'},
{'age': 28, 'is_child': False, 'name': 'Lyn'},
{'age': 15, 'is_child': False, 'name': 'Xiaomi'},
{'age': 19, 'is_child': False, 'name': 'Yuki'},
{'age': 29, 'is_child': False, 'name': 'Park'},
{'age': 17, 'is_child': False, 'name': 'Smith'},
{'age': 12, 'is_child': True, 'name': 'Lee'}]
# get top of records by N
lst_customer = ls.Listorm(userTable)
lst_customer.top('age', n=2) # get oldest 2 people in Listorm
[{'age': 29, 'gender': 'M', 'location': 'Korea', 'name': 'Park'},
{'age': 28, 'gender': 'F', 'location': 'China', 'name': 'Lyn'}]
# get top of records by percentage(if 0<n<1)
lst_customer = ls.Listorm(userTable)
lst_customer.top('age', n=0.5) # get oldest people by top 50% of age
[{'age': 29, 'gender': 'M', 'location': 'Korea', 'name': 'Park'},
{'age': 28, 'gender': 'F', 'location': 'China', 'name': 'Lyn'},
{'age': 19, 'gender': 'M', 'location': 'USA', 'name': 'Charse'},
{'age': 19, 'gender': 'F', 'location': 'Japan', 'name': 'Yuki'}]
3 . Advanced useage - sorting, grouping, join
# 1.orderby location ASC age DESC
lst_customer = ls.Listorm(userTable)
lst_customer.orderby('location', '-age')
[{'age': 28, 'gender': 'F', 'location': 'China', 'name': 'Lyn'},
{'age': 15, 'gender': 'M', 'location': 'China', 'name': 'Xiaomi'},
{'age': 19, 'gender': 'F', 'location': 'Japan', 'name': 'Yuki'},
{'age': 29, 'gender': 'M', 'location': 'Korea', 'name': 'Park'},
{'age': 18, 'gender': 'M', 'location': 'Korea', 'name': 'Hong'},
{'age': 12, 'gender': 'F', 'location': 'Korea', 'name': 'Lee'},
{'age': 19, 'gender': 'M', 'location': 'USA', 'name': 'Charse'},
{'age': 17, 'gender': 'M', 'location': 'USA', 'name': 'Smith'}]
# 2-1groupby location, retrieve gender count and max age
lst_customer = ls.Listorm(userTable)
lst_customer.groupby('location', age=max, gender=len)
[{'age': 28, 'gender': 2, 'location': 'China'},
{'age': 19, 'gender': 1, 'location': 'Japan'},
{'age': 29, 'gender': 3, 'location': 'Korea'},
{'age': 19, 'gender': 2, 'location': 'USA'}]
# 2-2.you can rename retrieving columns name which set by grouped result
lst_customer = ls.Listorm(userTable)
lst_customer.groupby('location',
age=max, gender=len, location=len,
renames={'age':'Oldest', 'gender': 'GenderCount', 'location': 'locationCount'}
)
[{'GenderCount': 2, 'Oldest': 28, 'locationCount': 2},
{'GenderCount': 1, 'Oldest': 19, 'locationCount': 1},
{'GenderCount': 3, 'Oldest': 29, 'locationCount': 3},
{'GenderCount': 2, 'Oldest': 19, 'locationCount': 2}]
# 2-2.you can include extra column value(value might be last record of group)
lst_customer = ls.Listorm(userTable)
lst_customer.groupby('location',
age=max, gender=len, location=len,
renames={'age':'Oldest', 'gender': 'GenderCount', 'location': 'locationCount'},
extra_columns = ['location']
)
[{'GenderCount': 2, 'Oldest': 28, 'location': 'China', 'locationCount': 2},
{'GenderCount': 1, 'Oldest': 19, 'location': 'Japan', 'locationCount': 1},
{'GenderCount': 3, 'Oldest': 29, 'location': 'Korea', 'locationCount': 3},
{'GenderCount': 2, 'Oldest': 19, 'location': 'USA', 'locationCount': 2}]
# 3.join
#Customers buy records for join Example
buyTable = [
{'name': 'Xiaomi', 'product': 'battery', 'amount':7},
{'name': 'Hong', 'product': 'keyboard', 'amount':1},
{'name': 'Lyn', 'product': 'cleaner', 'amount':5},
{'name': 'Hong', 'product': 'monitor', 'amount':1},
{'name': 'Hong', 'product': 'mouse', 'amount':3},
{'name': 'Lyn', 'product': 'mouse', 'amount':1},
{'name': 'Unknown', 'product': 'keyboard', 'amount':1},
{'name': 'Lee', 'product': 'hardcase', 'amount':2},
{'name': 'Lee', 'product': 'keycover', 'amount':2},
{'name': 'Yuki', 'product': 'manual', 'amount':1},
{'name': 'Xiaomi', 'product': 'cable', 'amount':1},
{'name': 'anonymous', 'product': 'adopter', 'amount':2},
{'name': 'Park', 'product': 'battery', 'amount':2},
{'name': 'Hong', 'product': 'cleaner', 'amount':3},
{'name': 'Smith', 'product': 'mouse', 'amount':1},
]
lst_customer = ls.Listorm(userTable)
lst_buyitems = ls.Listorm(buyTable)
# 3-1 inner join
# Add Extra customer's Info (location) to each buytime
lst_buyitems.join(lst_customer.select('location', 'name'), on='name')
[{'amount': 1, 'location': 'Japan', 'name': 'Yuki', 'product': 'manual'},
{'amount': 1, 'location': 'USA', 'name': 'Smith', 'product': 'mouse'},
{'amount': 2, 'location': 'Korea', 'name': 'Lee', 'product': 'hardcase'},
{'amount': 2, 'location': 'Korea', 'name': 'Lee', 'product': 'keycover'},
{'amount': 7, 'location': 'China', 'name': 'Xiaomi', 'product': 'battery'},
{'amount': 1, 'location': 'China', 'name': 'Xiaomi', 'product': 'cable'},
{'amount': 1, 'location': 'Korea', 'name': 'Hong', 'product': 'keyboard'},
{'amount': 1, 'location': 'Korea', 'name': 'Hong', 'product': 'monitor'},
{'amount': 3, 'location': 'Korea', 'name': 'Hong', 'product': 'mouse'},
{'amount': 3, 'location': 'Korea', 'name': 'Hong', 'product': 'cleaner'},
{'amount': 2, 'location': 'Korea', 'name': 'Park', 'product': 'battery'},
{'amount': 5, 'location': 'China', 'name': 'Lyn', 'product': 'cleaner'},
{'amount': 1, 'location': 'China', 'name': 'Lyn', 'product': 'mouse'}]
# 3-2 left join
# if names in buy table are not in customer table, then set to none the customer's info(location is set to none)
lst_buyitems.join(lst_customer.select('location', 'name'), on='name', how='left')
# Unknown and anonymouse location would be set to None
[{'amount': 1, 'location': 'Korea', 'name': 'Hong', 'product': 'keyboard'},
{'amount': 1, 'location': 'Korea', 'name': 'Hong', 'product': 'monitor'},
{'amount': 3, 'location': 'Korea', 'name': 'Hong', 'product': 'mouse'},
{'amount': 3, 'location': 'Korea', 'name': 'Hong', 'product': 'cleaner'},
{'amount': 2, 'location': 'Korea', 'name': 'Lee', 'product': 'hardcase'},
{'amount': 2, 'location': 'Korea', 'name': 'Lee', 'product': 'keycover'},
{'amount': 5, 'location': 'China', 'name': 'Lyn', 'product': 'cleaner'},
{'amount': 1, 'location': 'China', 'name': 'Lyn', 'product': 'mouse'},
{'amount': 2, 'location': 'Korea', 'name': 'Park', 'product': 'battery'},
{'amount': 1, 'location': 'USA', 'name': 'Smith', 'product': 'mouse'},
{'amount': 1, 'location': None, 'name': 'Unknown', 'product': 'keyboard'},
{'amount': 7, 'location': 'China', 'name': 'Xiaomi', 'product': 'battery'},
{'amount': 1, 'location': 'China', 'name': 'Xiaomi', 'product': 'cable'},
{'amount': 1, 'location': 'Japan', 'name': 'Yuki', 'product': 'manual'},
{'amount': 2, 'location': None, 'name': 'anonymous', 'product': 'adopter'}]
# 3-3 outer join
lst_buyitems.join(lst_customer.select('location', 'name'), on='name', how='outer')
[{'amount': None, 'location': 'USA', 'name': 'Charse', 'product': None},
{'amount': 1, 'location': 'Japan', 'name': 'Yuki', 'product': 'manual'},
{'amount': 1, 'location': 'USA', 'name': 'Smith', 'product': 'mouse'},
{'amount': 2, 'location': 'Korea', 'name': 'Lee', 'product': 'hardcase'},
{'amount': 2, 'location': 'Korea', 'name': 'Lee', 'product': 'keycover'},
{'amount': 7, 'location': 'China', 'name': 'Xiaomi', 'product': 'battery'},
{'amount': 1, 'location': 'China', 'name': 'Xiaomi', 'product': 'cable'},
{'amount': 1, 'location': None, 'name': 'Unknown', 'product': 'keyboard'},
{'amount': 1, 'location': 'Korea', 'name': 'Hong', 'product': 'keyboard'},
{'amount': 1, 'location': 'Korea', 'name': 'Hong', 'product': 'monitor'},
{'amount': 3, 'location': 'Korea', 'name': 'Hong', 'product': 'mouse'},
{'amount': 3, 'location': 'Korea', 'name': 'Hong', 'product': 'cleaner'},
{'amount': 2, 'location': None, 'name': 'anonymous', 'product': 'adopter'},
{'amount': 2, 'location': 'Korea', 'name': 'Park', 'product': 'battery'},
{'amount': 5, 'location': 'China', 'name': 'Lyn', 'product': 'cleaner'},
{'amount': 1, 'location': 'China', 'name': 'Lyn', 'product': 'mouse'}]
4-1.Utilities - Find Different in two different table - The Changed thing in table
# changing to add two record, delete two record and modified a recored where name ==Lyn set age 28
before = [
{'name': 'Hong', 'gender': 'M', 'age': 18, 'location': 'Korea'},
{'name': 'Charse', 'gender': 'M', 'age': 19, 'location': 'USA'},
{'name': 'Lyn', 'gender': 'F', 'age': 29, 'location': 'China'},
]
after = [
{'name': 'Lyn', 'gender': 'F', 'age': 28, 'location': 'China'},
{'name': 'Xiaomi', 'gender': 'M', 'age': 15, 'location': 'China'},
{'name': 'Park', 'gender': 'M', 'age': 29, 'location': 'Korea'},
]
changes = ls.Listorm(before).get_changes(after, pk='name')
#pk: primary key is needed
changes
Changes(added=[Added(pk='Xiaomi', rows={'location': 'China', 'gender': 'M', 'name': 'Xiaomi', 'age': 15}), Added(pk='Park', rows={'location': 'Korea', 'gender': 'M', 'name': 'Park', 'age': 29})], deleted=[Deleted(pk='Hong', rows={'location': 'Korea', 'gender': 'M', 'name': 'Hong', 'age': 18}), Deleted(pk='Charse', rows={'location': 'USA', 'gender': 'M', 'name': 'Charse', 'age': 19})], updated=[Updated(pk='Lyn', before={'location': 'China', 'gender': 'F', 'name': 'Lyn', 'age': 29}, after={'location': 'China', 'gender': 'F', 'name': 'Lyn', 'age': 28}, where=['age'])])
changes.added
[Added(pk='Xiaomi', rows={'location': 'China', 'gender': 'M', 'name': 'Xiaomi', 'age': 15}),
Added(pk='Park', rows={'location': 'Korea', 'gender': 'M', 'name': 'Park', 'age': 29})]
changes.deleted
[Deleted(pk='Hong', rows={'location': 'Korea', 'gender': 'M', 'name': 'Hong', 'age': 18}),
Deleted(pk='Charse', rows={'location': 'USA', 'gender': 'M', 'name': 'Charse', 'age': 19})]
changes.updated
[Updated(pk='Lyn', before={'location': 'China', 'gender': 'F', 'name': 'Lyn', 'age': 29}, after={'location': 'China', 'gender': 'F', 'name': 'Lyn', 'age': 28}, where=['age'])]
4-2. Utilities - Read And Write to Excel, CSV
lst = ls.read_excel(file_name=None, file_contents=None, sheet_index=0, start_row=0, index=None)
Excel File or byte Content of Excel to Listorm object
lst = ls.read_csv(filename=None, encoding='utf-8', fp=None, index=None)
CSV file or filepointer of CSV to Listorm object
# saving date to excel or CSV
lst_customer = ls.Listorm(userTable)
excel_file_content = lst_customer.to_excel(filename=None) # If filnames is None, returns bytes of filecontents
csv_file_content = lst_customer.to_csv(filename=None) # If filnames is None, returns bytes of filecontents
listorm
listorm
Metadata
Release files for listorm 1.3.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| listorm-1.3.4.tar.gz | 32.0 kB | Without provenance | Details for listorm-1.3.4.tar.gz |
Release files / listorm-1.3.4.tar.gz
| Download URL | listorm-1.3.4.tar.gz |
|---|---|
| Size | 32.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8be44ae2a96bd53e6dacd1c92b68a9b38504139d03b5e51126f5384d02440e5f
|
|
BLAKE2b-256 checksum How to use checksums |
fb37b911ae48fd58bdb8cd693f07a40027c52f33281893db1e5bc71422037055
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.9
|
Security for listorm 1.3.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.